可能です?
DECLARE @vTableName varchar(50)
SET @vTableName = (SELECT TableName FROM qms_Types WHERE Id = 1)
SELECT * FROM @vTableName
このエラーがあります:
メッセージ 1087、レベル 16、状態 1、行 3 テーブル変数 "@vTableName" を宣言する必要があります。
可能です?
DECLARE @vTableName varchar(50)
SET @vTableName = (SELECT TableName FROM qms_Types WHERE Id = 1)
SELECT * FROM @vTableName
このエラーがあります:
メッセージ 1087、レベル 16、状態 1、行 3 テーブル変数 "@vTableName" を宣言する必要があります。
簡単な答え: いいえ。
長い答え: Nooooooooooooooooooooooooooooooooooooo. 必要に応じて動的 SQL を使用しますが、事前にテーブル名がわからない方法でテーブルを構造化する場合は、スキーマを再考することをお勧めします。
動的 SQL の使用方法を学習するための優れたリソースは次のとおりです。 動的 SQLの呪いと祝福
その名前のテーブルから選択しようとしている場合は、次のようなことができます。
DECLARE @vTableName varchar(50)
SET @vTableName = (SELECT TableName FROM qms_Types WHERE Id = 1)
EXECUTE('SELECT * FROM [' + @vTableName + ']')
sp_executesql
これを行う唯一の方法は、動的 SQL を使用することです。これは、T-SQL テキストを作成し、それを(または単にexec
)を使用して実行する方法を指します。
これは、動的SQLに関する役立つリンクです 動的SQLの呪いと祝福。
これが動的 sql の場合であるかどうか、またはこの操作を実行する別の方法があるかどうかを実際に検討する必要があります。
私はあなたがこれを望んでいると思います:
DECLARE @vTableName table(TableName varchar(50))
insert into @vTableName
SELECT TableName FROM qms_Types WHERE Id = 1
SELECT * FROM @vTableName