0

Я использую Рекурсивный CTE Я нашел here получить даты в диапазоне:Report Builder бросает ошибка над типами несовпадения в рекурсивном КТР

WITH T(d) 
AS 
( 
SELECT @DateFrom 
UNION ALL 
SELECT CAST(DateAdd(DD,1,T.d) AS DATETIME) FROM T WHERE T.d < @DateTo 
) 
SELECT d FROM T OPTION (MAXRECURSION 32767); 

Этот КТР работает отлично на моем SQL Server, но когда пытаясь создать набор данных с этим запросом в Report Builder 3.0 я получаю Определить параметры запроса диалога (который я обычно gon't получить) и после нажатия ОК, я получаю ошибку: Types don't match between the anchor and the recursive part in column "d" of recursive query "T".

Я знаю DATEADD возвращается SMALLDATETIME, и я, хотя Report Builder передает DATETIME в @DateFrom, поэтому я подумал, что CASTing возвращаемое значение DATEADD на DATETIME решит его, но это не так.

Что мне здесь не хватает?

ответ

1

Просто догадка, попробуйте следующее: -

WITH T(d) 
AS 
( 
SELECT cast(@DateFrom as datetime) as d 
UNION ALL 
SELECT CAST(DateAdd(DD,1,T.d) AS DATETIME) FROM T WHERE T.d < @DateTo 
) 
SELECT d FROM T OPTION (MAXRECURSION 32767); 
+0

Спасибо! Это сделал трюк. Вы знаете, каков тип параметра даты, отправленного построителем отчетов? Это явно не DATETIME ... – OzW

+0

И после литья @DateFrom в анкерной части мне даже не нужен бросок в рекурсивной части. – OzW

+0

@OzW, если вы видите свойства параметра, у него есть только один параметр даты. Я думаю, что это не похоже на тип datetime SQL Server. – KrazzyNefarious

Смежные вопросы