2013-02-13 4 views
0

У меня возникли трудности с поиском, почему моя строка t-sql появляется с сообщением об ошибке, поскольку вы можете видеть, что я создал этот sql для извлечения информации из других таблиц, чтобы создать таблицу производительности , однако что-то не так, и я не могу понять, что это такое. Вы можете помочь. Заранее спасибо.T-SQL и Case Statement

Сообщение об ошибке:

Msg 206, Level 16, State 2, Line 32 
Operand type clash: int is incompatible with date 

SQL скрипт:

DECLARE @PitchType_Skey INT 
DECLARE @Site_Skey INT 
DECLARE @Capacity INT 
DECLARE @StartDate DATE 
DECLARE @EndDate DATE 

SET @PitchType_Skey = 1 
SET @Site_Skey = 1 
SET @Capacity = 0 


WHILE (@Site_Skey < 127) 

BEGIN 
    IF @PitchType_Skey = 8 

    BEGIN 

    SET @PitchType_Skey = 1 
    SET @Site_Skey = @Site_Skey + 1 

    END 

    IF (@Site_Skey < 127) 

    BEGIN 

    Set @Capacity = (SELECT SiteWeighting From Site Where Site_Skey = @Site_Skey) 
    Set @Capacity = @Capacity * (SELECT PitchTypeWeighting From PitchType Where PitchType_Skey = @PitchType_Skey) 
    Set @Capacity = @Capacity * ((10*(100+((RAND()*40)-20)))*0.01) 

    INSERT INTO Capacity2 
    SELECT 
     CASE 
     WHEN YEAR(@StartDate) = 2010 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 1 THEN '01 May 2010' 
     WHEN YEAR(@StartDate) = 2011 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 1 THEN '01 May 2011' 
     WHEN YEAR(@StartDate) = 2012 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 1 THEN '01 May 2012' 
     WHEN YEAR(@StartDate) = 2013 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 1 THEN '01 May 2013' 
     WHEN YEAR(@StartDate) = 2014 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 1 THEN '01 May 2014' 
     WHEN YEAR(@StartDate) = 2015 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 1 THEN '01 May 2015' 

     WHEN YEAR(@StartDate) = 2010 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 2 THEN '1 Apr 2010' 
     WHEN YEAR(@StartDate) = 2011 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 2 THEN '25 Mar 2011' 
     WHEN YEAR(@StartDate) = 2012 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 2 THEN '10 Mar 2012' 
     WHEN YEAR(@StartDate) = 2013 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 2 THEN '01 Apr 2013' 
     WHEN YEAR(@StartDate) = 2014 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 2 THEN '01 Mar 2014' 
     WHEN YEAR(@StartDate) = 2015 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 2 THEN '15 Mar 2015' 

     WHEN YEAR(@StartDate) = 2010 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 3 THEN '1 Apr 2010' 
     WHEN YEAR(@StartDate) = 2011 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 3 THEN '25 Mar 2011' 
     WHEN YEAR(@StartDate) = 2012 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 3 THEN '10 Mar 2012' 
     WHEN YEAR(@StartDate) = 2013 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 3 THEN '01 Apr 2013' 
     WHEN YEAR(@StartDate) = 2014 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 3 THEN '01 Mar 2014' 
     WHEN YEAR(@StartDate) = 2015 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 3 THEN '15 Mar 2015' 

     WHEN YEAR(@StartDate) = 2010 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 4 THEN '01 Jan 2010' 
     WHEN YEAR(@StartDate) = 2011 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 4 THEN '01 Jan 2011' 
     WHEN YEAR(@StartDate) = 2012 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 4 THEN '01 Jan 2012' 
     WHEN YEAR(@StartDate) = 2013 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 4 THEN '01 Jan 2013' 
     WHEN YEAR(@StartDate) = 2014 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 4 THEN '01 Jan 2014' 
     WHEN YEAR(@StartDate) = 2015 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 4 THEN '01 Jan 2015' 

     ELSE NULL 
     END as StartDate, 

     CASE 
     WHEN YEAR(@EndDate) = 2010 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 1 THEN '30 Sep 2010' 
     WHEN YEAR(@EndDate) = 2011 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 1 THEN '30 Sep 2011' 
     WHEN YEAR(@EndDate) = 2012 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 1 THEN '30 Sep 2012' 
     WHEN YEAR(@EndDate) = 2013 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 1 THEN '30 Sep 2013' 
     WHEN YEAR(@EndDate) = 2014 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 1 THEN '30 Sep 2014' 
     WHEN YEAR(@EndDate) = 2015 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 1 THEN '30 Sep 2015' 

     WHEN YEAR(@EndDate) = 2010 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 2 THEN '01 Nov 2010' 
     WHEN YEAR(@EndDate) = 2011 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 2 THEN '05 Nov 2011' 
     WHEN YEAR(@EndDate) = 2012 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 2 THEN '02 Nov 2012' 
     WHEN YEAR(@EndDate) = 2013 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 2 THEN '08 Nov 2013' 
     WHEN YEAR(@EndDate) = 2014 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 2 THEN '01 Nov 2014' 
     WHEN YEAR(@EndDate) = 2015 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 2 THEN '03 Nov 2015' 

     WHEN YEAR(@EndDate) = 2010 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 3 THEN '01 Nov 2010' 
     WHEN YEAR(@EndDate) = 2011 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 3 THEN '05 Nov 2011' 
     WHEN YEAR(@EndDate) = 2012 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 3 THEN '02 Nov 2012' 
     WHEN YEAR(@EndDate) = 2013 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 3 THEN '08 Nov 2013' 
     WHEN YEAR(@EndDate) = 2014 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 3 THEN '01 Nov 2014' 
     WHEN YEAR(@EndDate) = 2015 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 3 THEN '03 Nov 2015' 

     WHEN YEAR(@EndDate) = 2010 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 4 THEN '31 Dec 2010' 
     WHEN YEAR(@EndDate) = 2011 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 4 THEN '31 Dec 2011' 
     WHEN YEAR(@EndDate) = 2012 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 4 THEN '31 Dec 2012' 
     WHEN YEAR(@EndDate) = 2013 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 4 THEN '31 Dec 2013' 
     WHEN YEAR(@EndDate) = 2014 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 4 THEN '31 Dec 2014' 
     WHEN YEAR(@EndDate) = 2015 AND (SELECT SiteWeighting FROM Site WHERE [email protected]_Skey) = 4 THEN '31 Dec 2015' 

     ELSE NULL 
     END, 

     ROUND(@Capacity,0) as Capacity, 
     @PitchType_Skey, @Site_Skey 

    END 
    SET @PitchType_Skey = @PitchType_Skey + 1 

END 
+0

Что такое определение таблицы для 'Capacity2'? Где '@ StartDate' и' @ EndDate' получают свои значения? Каков тип 'PitchTypeWeighting'? Каков тип 'SiteWeighting'? –

+0

Hi Lieven «@StartDate» и «@EndDate» получают свои значения из инструкции «Когда», оператор «Когда» выводит число от 1 до 4 из таблицы сайтов, чтобы определить дату. Оба «Weightings» - Int. – wafw1971

ответ

2

Вы вставляете в Capacity2 таблицу без указания, какие ценности вдаваться в какие столбцы поместить каждое значение в. Я предполагаю, что это является причиной проблемы, и она пытается поместить одно из ваших других целочисленных значений в столбец начальной даты.

Вы не отправил вашу схему, так что я могу только догадываться, ваши имена столбцов, но я предлагаю вам изменить вставки часть вашего сценария, чтобы быть похожим:

INSERT INTO Capacity2 (StartDate, EndDate, Capacity, PitchTypeKey, Site_SKey) 
SELECT 
    CASE 
    WHEN ... 

Таким образом, нет никакой двусмысленности в какое значение вы хотите вставить в какой столбец.

+0

Hi Bridge, Это не сработало, мои «@StartDate» и «@EndDate» вернулись с нулевыми значениями. Thanks – wafw1971

+0

@ wafw1971 Что имеет нулевые значения, связанные с указанием имен столбцов для вставки? – Bridge

+0

После того, как я последовал твоему совету, моя таблица засела, но столбцы «@ StartDate» и «@EndDate» не указывали только на слово Null. Мои имена столбцов отлично работали, так как сценарий над ним просто не заполнялся. – wafw1971