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