У меня динамический запрос, который я написал, что выглядит следующим образом:Использование динамического синтаксиса в представлении или функции
DECLARE @sql nvarchar(max)
SELECT @sql =
'select distinct datetable.Date
from (
select cast(DATEADD(day,-(a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a)),getdate()) as date) AS Date
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4
union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4
union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4
union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4
union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as d
union all
select cast(DATEADD(day,(a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a)),getdate()) as date) AS Date
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4
union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4
union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4
union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4
union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as d
) datetable
where '
+
replace(replace(replace(stuff((SELECT ' or datetable.Date between cast(''' + cast(cast(hld1.StrDate as date) as nvarchar(12)) + N''' as date) and cast(''' + cast(cast(hld1.endDate as date) as nvarchar(12))+ N''' as date)
'
from hld1 for xml path('')),1,3,''), '<', '<'), '>', '>'), '
', char(13)) +
'order by datetable.Date '
--print @sql
EXEC sys.sp_executeSQL @SQL
HLD1 список праздников, где каждый праздник имеет начало и конец Дата. Сам запрос возвращает список дат, которые определяются как праздники. (Причина, по которой я не могу просто выбрать даты начала и объединить их к датам окончания, заключается в том, что в течение трех дней может быть очень большой праздник, а средний день не будет отображаться в любом списке.
Тем не менее, я использую это чудовище для создания функции, и, как часть функции, я хочу иметь возможность сделать что-то вроде «Если дата в этом списке, сделайте следующее».
My Первоначальный план состоял в том, чтобы создать представление, которое было бы просто списком дат, однако это невозможно, поскольку оно использует переменную, а переменные не допускаются в представлениях.
Следующей мыслью было создать функция, которая просто вернет список. Howe ver, когда я поставил в синтаксис, чтобы создать его как функцию, я получаю ошибку The last statement included within a function must be a return statement.
Я не уверен, какой путь я должен преследовать отсюда. Причина, по которой я не могу просто составить таблицу и вручную указать даты, состоит в том, что в настоящее время список распространяется только до 2016 года. Кроме того, список праздников (даты начала и окончания) может быть создан/добавлен по-разному для разных баз данных, конечная целевая функция будет добавлена и использована.
Если вам нужно больше информации/информации, пожалуйста, сообщите мне, и я буду рад предоставить. Я просто учился, когда я ухожу. :)
Edit 1: Я нашел ссылку, но он не появляется, чтобы применить в данном случае: Create A View With Dynamic Sql
Возможно, вам стоит опубликовать таблицу hld1. Определение таблицы и несколько строк выборочных данных должно быть достаточным. Наряду с этим объяснение того, что вы пытаетесь сделать, поможет. На данный момент я просто не могу понять, что вам нужно сделать. –