10

可能です?

DECLARE @vTableName varchar(50)

SET @vTableName = (SELECT TableName FROM qms_Types WHERE Id = 1)

SELECT * FROM @vTableName

このエラーがあります:

メッセージ 1087、レベル 16、状態 1、行 3 テーブル変数 "@vTableName" を宣言する必要があります。

4

6 に答える 6

20

簡単な答え: いいえ。

長い答え: Nooooooooooooooooooooooooooooooooooooo. 必要に応じて動的 SQL を使用しますが、事前にテーブル名がわからない方法でテーブルを構造化する場合は、スキーマを再考することをお勧めします。

動的 SQL の使用方法を学習するための優れたリソースは次のとおりです。 動的 SQLの呪いと祝福

于 2012-04-05T14:30:19.810 に答える
5

その名前のテーブルから選択しようとしている場合は、次のようなことができます。

DECLARE @vTableName varchar(50) 
SET @vTableName = (SELECT TableName FROM qms_Types WHERE Id = 1) 
EXECUTE('SELECT * FROM [' + @vTableName + ']')
于 2012-04-05T14:27:57.463 に答える
1

sp_executesqlこれを行う唯一の方法は、動的 SQL を使用することです。これは、T-SQL テキストを作成し、それを(または単にexec)を使用して実行する方法を指します。

これは、動的SQLに関する役立つリンクです 動的SQLの呪いと祝福

これが動的 sql の場合であるかどうか、またはこの操作を実行する別の方法があるかどうかを実際に検討する必要があります。

于 2012-04-05T14:33:23.847 に答える
1

私はあなたがこれを望んでいると思います:

DECLARE @vTableName table(TableName varchar(50))

insert into @vTableName 
SELECT TableName FROM qms_Types WHERE Id = 1

SELECT * FROM @vTableName
于 2012-04-05T14:30:22.700 に答える