Моя версия SQL Server - SQL Server 2008 R2.
В операторе in
содержится около 100 строк.
Я использую этот SQL для выполнения динамического запроса:
DECLARE @DynamicDate nvarchar(100)
DECLARE @SQLString_1 nvarchar(max)
SET @DynamicDate='20181021'
SET @SQLString_1 =
N'select *
from T1_'+@DynamicDate+' w
left join
T2 c
on w.ASSET_ID=c.DEVICE_ID
left join
T3 cm
on c.DEVICE_ID=cm.ASSET_ID
left join
T4 gm
on cm.GROUP_ID=gm.GROUP_ID
left join
T5 em
on w.EVENT_ID =em.EVENT_ID
and w.EVENT_CATEGORY_ID=em.EVENT_CATEGORY_ID
left join T6 sa
on w.PROCESS_NAME=sa.PROCESS_NAME
where
w.ASSET_ID in (''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
……
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'',
''{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}''
)
'
print(@SQLString_1)
--EXECUTE sp_executesql @SQLString_1
Когда я печатаю sql.Выводу нравится это:
select
*
from T1_20181021 w
left join
T2 c
on w.ASSET_ID=c.DEVICE_ID
left join
T3 cm
on c.DEVICE_ID=cm.ASSET_ID
left join
T4 gm
on cm.GROUP_ID=gm.GROUP_ID
left join
T5 em
on w.EVENT_ID =em.EVENT_ID
and w.EVENT_CATEGORY_ID=em.EVENT_CATEGORY_ID
left join T6 sa
on w.PROCESS_NAME=sa.PROCESS_NAME
where
w.ASSET_ID in (
'{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}',
'{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}',
……
'{XXXXXXXX-XXXX
Была напечатана только его часть.
Когда я использую sp_executesql @SQLString_1
Ошибка:
Сообщение 105, уровень 15, состояние 1 и строка 96 Цитата не закрывается после строки «{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}».Сообщение 102, уровень 15, состояние 1, строка 96 Недопустимый синтаксис в окрестности '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'.
Я использовал ключевое слово max
в @SQLString_1
,
Так что я не могу использовать execute sp_executesql`, похоже, оно не работает.
Как я могу это исправить?