Я пытаюсь вставить в параметр @table
, используя OPENROWSET
с @param
в цикле. Я адаптировал код из этого ответа, который демонстрирует использование динамического SQL для вставки параметра.
Код:
DECLARE @BuildTimes TABLE (
BuildTableName VARCHAR(max) NULL
,BuildDate DATE NULL
)
DECLARE @days INT = 0;
DECLARE @startDate DATE = GETDATE();
DECLARE @buildDate DATE = GETDATE();
DECLARE @sql nvarchar(max);
WHILE (@days <=30)
BEGIN
SET @buildDate = DATEADD(day, -1*@days, @startDate);
SET @sql='INSERT INTO @BuildTimes
SELECT *
FROM OPENROWSET(
''SQLNCLI'',
''SERVER=localhost;Trusted_Connection=yes;'',
''EXEC [LOG].[BuildTimes] @buildDate = ''''' + CAST(@buildDate AS VARCHAR) +''''''')'
PRINT @sql
EXEC(@sql)
SET @days = @days + 1
END
SELECT * FROM @BuildTimes
Ошибка:
Msg 1087, Level 15, State 2, Line 9
Must declare the table variable "@BuildTimes"
Я пытался запустить OPENROWSET как нединамический SQL без параметра, и все работает правильно. Что я делаю не так?
EXEC
. Это включает в себя табличные переменные. Это сработает, если вы используете временную таблицу (или переместитеINSERT
из внутреннего запроса и используйтеINSERT .. EXEC
). - person Jeroen Mostert   schedule 25.06.2019