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 に答える