gpt4 book ai didi

sql-server-2008 - 必须声明标量变量 "@TEMPLATE_NAME"

转载 作者:行者123 更新时间:2023-12-04 13:50:14 24 4
gpt4 key购买 nike

我在尝试执行以下代码时遇到错误,寻找类似的解决方案但无法弄清楚。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com