Вставить в таблицу несколько переменных с помощью динамического запроса - PullRequest
0 голосов
/ 03 декабря 2018

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

<code>
DECLARE @t TABLE ( TableName NVARCHAR(250) )
declare @i as int = 1,  @A_1 NVARCHAR(250) ='ABC',  @A_2 NVARCHAR(250) ='XYZ', @A_3 NVARCHAR(250) = 'AEI';
WHILE (@i <= 3) 
 BEGIN 
    DECLARE @q NVARCHAR(MAX) = ' DECLARE @t TABLE ( TableName NVARCHAR(250) )
                                insert into @t 
                                select  @A_' + CAST(@i AS VARCHAR) + ' as field
                                from @t
                            '
  INSERT INTO @t
  EXEC(@q)
       SET @i  = @i  + 1<br>
 END
SELECT * FROM @t

ожидаемый результат должен быть:

TableName

  1. ABC
  2. XYZ
  3. AEI

переменная @A_X может иметь 1 или 15 переменных (@ A_1, @ A_2 .... @ A15)

1 Ответ

0 голосов
/ 03 декабря 2018

Вместо табличной переменной вы можете использовать временную таблицу.Проверьте это:

DROP TABLE #TableList 
GO
CREATE TABLE #TableList (
         A_1 NVARCHAR(250)
        ,A_2 NVARCHAR(250)
        ,A_3 NVARCHAR(250)
)

DROP TABLE #Result 
GO
CREATE TABLE #Result (
         TableName  NVARCHAR(250)
)

INSERT INTO #TableList
VALUES('ABC','XYZ','AEI')

DECLARE @q NVARCHAR(MAX)='';
DECLARE   @i as int = 1

WHILE (@i <= 3) 
BEGIN 
    SET  @q   = @q+CHAR(13)+' 
                    INSERT INTO #Result(TableName)
                    SELECT  A_' + CAST(@i AS VARCHAR) + ' from #TableList;'

    SET @i = @i + 1
END

EXEC sp_executesql @q
PRINT (@q)

SELECT *
FROM #Result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...