Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在TSQL中将变量编织到表名中_Sql Server_Tsql_Dynamic Sql_Ssms 2014 - Fatal编程技术网

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

Sql server 在TSQL中将变量编织到表名中,sql-server,tsql,dynamic-sql,ssms-2014,Sql Server,Tsql,Dynamic Sql,Ssms 2014,我正在尝试学习如何使用动态SQL来自动化否则需要大量键入的内容。但是,这将包括将变量直接放入表名中(而不是作为整个表名) 当直接在SSMS中运行下面的查询时,我得到输出“Command(s)completed successfully”。。。但我更希望得到查询输出。我哪里做错了 DECLARE @sql NVARCHAR(MAX) DECLARE @cat NVARCHAR(25) DECLARE @type NVARCHAR(25) SET @sql = ' SELE

我正在尝试学习如何使用动态SQL来自动化否则需要大量键入的内容。但是,这将包括将变量直接放入表名中(而不是作为整个表名)

当直接在SSMS中运行下面的查询时,我得到输出“Command(s)completed successfully”。。。但我更希望得到查询输出。我哪里做错了

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'

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


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


@cat
@sql
中使用。我修复了
@sql
中的
@cat
。因此,我的方法是,在
sp_executesql
后面有参数,这是为什么?这是我在网上找到的方式,但你的方式才是有效的。这肯定是一个问题,因为你连接了
@cat
,尽管它是
null
,这意味着
@sql
是null(以及为什么我建议添加
打印
。如果在
@sql
中有
@cat
,而不是将其全部串联在一起,那么您尝试的变量替换可能会起作用。我只是不确定您是否可以在表名中成功地使用
@cat
@cat
@sql
中使用。我在
@sql
中修复了
@cat
。因此,我的方法是,在
sp_executesql
之后加上参数,这是为什么?这是我在网上找到的方法,但你的方法是有效的。显然存在一个问题,你在连接
@cat
,即使它是ode>null,这意味着
@sql
为null(以及为什么我建议添加
打印
。如果在
@sql
中有
@cat
,而不是将其全部串联在一起,那么您尝试的变量替换可能会起作用。我只是不确定您是否能够在表名中成功使用
@cat
)。
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