1

現在、ストアド プロシージャを記述し、int 型の変数の値をテーブル名として変数を使用した select ステートメントの結果に設定するのに問題があります。古いスレッドを見て、複数の方法を試しましたが、うまくいきませんでした。テーブル名に関するエラーが発生しない場合は、変数変換の問題でエラーが発生します。私はこれにあまりにも長い間取り組んできましたが、助けていただければ幸いです。以下は私のコードの一部です。ありがとう

DECLARE @BATCHNUMBER VARCHAR  --value set in earlier code
DECLARE @ETABLE VARCHAR(50); --the table name
DECLARE @FIRSTDOCID INT;      
SET @ETABLE = 'tablename_' + @BATCHNUMBER; --CREATE FIRST TABLE NAME

SELECT @FIRSTDOCID = MIN(D0CID) FROM @ETABLE

私が得るエラーは次のとおりです。テーブル変数「@ETABLE」を宣言する必要があります

4

2 に答える 2

1

テーブルではなくから選択しようとしてVARCHARいます。これを機能させる唯一の方法は、動的 SQL を使用することです。

DECLARE @SQL NVARCHAR(250);
SET @SQL = 'SELECT @OUTPUT = MIN(D0CID) FROM ' + QuoteName(@ETABLE);
EXEC sp_executeSql @SQL, N'@output INT OUTPUT', @FIRSTDOCID OUTPUT;

SELECT @FIRSTDOCID;

ただし、SQL インジェクションにつながることが多いため、動的 SQL の使用はお勧めしません。

于 2013-03-04T16:46:58.000 に答える
0

execクエリを動的に構築している場合は、おそらく use のようなことをしなければならないでしょう:

SET @QUERY = "SELECT" + ...etc.
exec(@QUERY)

は varchar であるためETABLE、予想どおり「テーブル変数」ではありません。

于 2013-03-04T16:47:50.070 に答える