Как использовать скалярную переменную в XML Путь запроса SQL? - PullRequest
0 голосов
/ 13 марта 2020

Я хочу передать имя таблицы в скалярную переменную @Table_Name в виде строки. Но я получаю сообщение об ошибке:

Необходимо объявить переменную таблицы @ Table_Name.

Как добиться того же? Ниже приведен фрагмент кода:

Declare @Table_Name as varchar(200);
SET @Table_Name = 'Table_name'
SET @sql = '(SELECT' + STUFF((SELECT *
                                FROM @Table_Name
                                FOR XML PATH('')), 1, 1, '' )
               + ' FROM SomeOtherTable'

Ответы [ 3 ]

0 голосов
/ 13 марта 2020

Оператор SELECT * FROM @Table_Name выполняется правильно, когда @Table_Name является табличной переменной. В вашем случае вам нужно использовать динамический оператор c и исправить синтаксические ошибки в операторе (дополнительно ( перед первым SELECT):

DECLARE @TableName sysname = N'YourTable'
DECLARE @sql nvarchar(max)
SET @sql = CONCAT(
    'SELECT STUFF((SELECT * FROM ',
    QUOTENAME(@TableName),
    ' FOR XML PATH('''')), 1, 1, N'''') FROM SomeOtherTable'
)

PRINT @sql
EXEC sp_executesql @sql
0 голосов
/ 13 марта 2020

Итак, я создал временную таблицу, используя входные данные, предоставленные пользователем, и использовал эту временную таблицу в запросе. Ниже приведен фрагмент кода:

Declare @Table_Name as varchar(200);
Declare @sql as nvarchar(max);
SET @Table_Name = 'Table_name'
SET @sql = 'select * into ##TempTable from '+ @Table_Name

SET @sql = '(SELECT' + STUFF((SELECT *
                                FROM ##TempTable
                                FOR XML PATH('')), 1, 1, '' )
               + ' FROM SomeOtherTable'
0 голосов
/ 13 марта 2020

Вы должны объявить переменную перед ее использованием.

DECLARE @table_name SYSNAME
SET @sql = '(SELECT STUFF((SELECT *
                            FROM '+ @Table_Name + 
                            ' FOR XML PATH('')), 1, 1, '' )'
           + ' FROM SomeOtherTable';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...