首页 > 解决方案 > 如何在 XML Path 查询 SQL 中使用标量变量?

问题描述

我想将表名@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'

标签: sqlsql-servertsql

解决方案


语句SELECT * FROM @Table_Name正确执行,when@Table_Name是表变量。在您的情况下,您需要使用动态语句并修复语句中的语法错误((在第一个之前附加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

推荐阅读