在TSQL中将变量编织到表名中

时间:2016-06-08 14:54:04

标签: sql-server tsql dynamic-sql ssms-2014

我试图学习使用动态SQL来自动化需要大量输入的内容。但是,这将包括将变量直接放入表名(而不是整个表名)。

当直接在SSMS中运行以下查询时,我得到输出"命令已成功完成" ...但我宁愿得到查询输出。我哪里错了?

DECLARE @sql NVARCHAR(MAX)
DECLARE @cat NVARCHAR(25)
DECLARE @type NVARCHAR(25)

SET @sql = '
            SELECT EntityID, ''@cat'' AS c, Subcategory'+@type+' 
            FROM WCO..Entity'+@cat+' a
            JOIN WCO..Entity'+@cat+'Subcategory b ON a.Entity'+@cat+'ID = b.Entity'+@cat+'ID
            JOIN WCO..'+@cat+'Subcategory c ON b.'+@cat+'SubcategoryID = c.'+@cat+'SubcategoryID
            WHERE
                EntityID IN Ent_ID IN (728456,762360)
            '

EXECUTE sp_executesql @sql, N'@cat NVARCHAR(25), @type NVARCHAR(25)', 'AdverseMedia', 'Label'

1 个答案:

答案 0 :(得分:2)

当您构建@sql时,您将@cat@type连接到字符串中,但是,它们未被初始化。因此,当您执行时,@sql变量为null变量(在print @sql之前尝试使用sp_executesql)。您正在寻找更多(注意声明中的初始化):

DECLARE @sql NVARCHAR(MAX)
DECLARE @cat NVARCHAR(25) = 'AdverseMedia'
DECLARE @type NVARCHAR(25) = 'Label'

SET @sql = '
            SELECT EntityID, '''+@cat+''' AS c, Subcategory'+@type+' 
            FROM WCO..Entity'+@cat+' a
            JOIN WCO..Entity'+@cat+'Subcategory b ON a.Entity'+@cat+'ID = b.Entity'+@cat+'ID
            JOIN WCO..'+@cat+'Subcategory c ON b.'+@cat+'SubcategoryID = c.'+@cat+'SubcategoryID
            WHERE
                EntityID IN Ent_ID IN (728456,762360)
            '
PRINT @sql
EXECUTE sp_executesql @sql