Sql 程序错误“;必须声明表“;
我有一个块代码来创建一个过程:Sql 程序错误“;必须声明表“;,sql,procedure,Sql,Procedure,我有一个块代码来创建一个过程: CREATE PROCEDURE GetTableinfomation @table nvarchar(50), @column nvarchar(50), @valuedk nvarchar(50) AS BEGIN SELECT * FROM @table WHERE @column = @valuedk END 我有一个错误 Msg 1087,级别15,状态2,过程gettableinformatio
CREATE PROCEDURE GetTableinfomation
@table nvarchar(50),
@column nvarchar(50),
@valuedk nvarchar(50)
AS
BEGIN
SELECT *
FROM @table
WHERE @column = @valuedk
END
我有一个错误
Msg 1087,级别15,状态2,过程gettableinformation,第7行必须声明表变量“@tenbang”
为什么?不能将SQL参数用于表名和列,只能用于变量 您可以通过使用动态SQL来解决此问题:
DECLARE @SQL nvarchar(4000)
DECLARE @PARAMS nvarchar(4000)
SET @SQL = 'SELECT * FROM '
+ QUOTENAME(@table,'"') + ' WHERE '
+ QUOTENAME(@column,'"') + '= @param1'
SET @PARAMS = '@param1 nvarchar(50)'
EXEC sp_executesql @SQL, @PARAMS, @param1=@valuedk
有关更多信息,请参阅sp_executesql
上的文档:
sp_executesql
通常优于exec
:计划缓存、参数化等。正如另一个答案所暗示的那样SELECT*FROM@table
假设您已使用DECLARE@table(id INT等VARCHAR(16))
创建了一个表变量。您需要构建一个新的SQL字符串,并使用该新字符串调用EXEC
或(最好)sp_executesql
。