我在尝试执行以下代码时遇到错误,寻找类似的解决方案但无法弄清楚。
DECLARE @TAB_COL_NAME TABLE(idx int identity(1,1), COLUMNNAME VARCHAR(MAX))
DECLARE @TEMPLATE_NAME NVARCHAR(50)
SET @TEMPLATE_NAME = 'MYTABLE1'
INSERT INTO @TAB_COL_NAME EXEC('SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '+@TEMPLATE_NAME)
因为看到很多人说要用sp_executesql,
我试过sp_executesql
,
DECLARE @SQL NVARCHAR(100)
DECLARE @TEMPLATE_NAM NVARCHAR(50)
SET @TEMPLATE_NAM = 'MYTABLE1'
SET @SQL = N'SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '+ '@TEMPLATE_NAME'
EXEC sp_executesql @SQL,
'@TEMPLATE_NAME Nvarchar(50)',
@TEMPLATE_NAME = @TEMPLATE_NAM
这给出了错误:Procedure expects parameter '@parameters' of type 'ntext/nchar/nvarchar'。
正确的解决方案是什么?
我不能在 EXEC SQL
中实现吗?
一些回复会有所帮助。
最佳答案
你为什么要传递变量?在您的情况下,您不必这样做。使用串联尝试以下操作:
DECLARE @SQL NVARCHAR(100) DECLARE @TEMPLATE_NAME NVARCHAR(50) SET @TEMPLATE_NAME = 'mytable' SET @SQL = N'SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '''+ @TEMPLATE_NAME + '''' print @SQL EXEC sp_executesql @SQL
但是,如果必须参数化,可以按以下方式使用sp_executesql
DECLARE @SQL NVARCHAR(100) DECLARE @TEMPLATE_NAME NVARCHAR(50) SET @TEMPLATE_NAME = 'mytable'; SET @SQL = N'SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TEMPLATE_NAME'; EXEC sp_executesql @SQL , N'@TEMPLATE_NAME NVARCHAR(50)', @TEMPLATE_NAME
关于sql-server-2008 - 必须声明标量变量 "@TEMPLATE_NAME",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17674084/