0

我有一个块代码来创建一个过程:

CREATE PROCEDURE GetTableinfomation
    @table nvarchar(50),
    @column nvarchar(50), 
    @valuedk nvarchar(50) 
AS
BEGIN 
   SELECT *  
   FROM @table 
   WHERE @column = @valuedk 
END

我有一个错误。

消息 1087,级别 15,状态 2,过程 GetTableinfomation,第 7 行
必须声明表变量“@tenbang”。

为什么?

4

1 回答 1

2

您不能将 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

于 2012-05-10T15:51:55.797 回答