0

各テーブルが標準的な規則に従って命名されているデータベースがあります。同様の名前のテーブルのさまざまなセットで定期的に実行する SQL スクリプトを作成しています。

テーブル間のテーブル名の共通部分を含むローカル変数を宣言し、その変数を使用してFROMステートメントのステートメントにテーブル名の一部を入力したいと思いSELECTます。

1234これを抽象化して、ローカル変数の値が代入されるテーブルで実行するにはどうすればよいですか?

Select count(*) From [Database].[dbo].[Table_1234]

これは明らかに機能しません:

Select count(*) From [Database].[dbo].['Table_'+@variable]

selectステートメントでローカル変数をテーブル名として使用する方法、またはこれを回避する方法はありますか?

4

2 に答える 2

2

免責事項:これは私には SQL Server のように見えますが、質問にはそのようにタグ付けされていませんでした。

次のEXEC関数を使用できます。

EXEC('Select count(*) From [Database].[dbo].[Table_' + @variable + ']')

SQL フィドル: http://www.sqlfiddle.com/#!3/0ef1d/3

于 2012-08-30T17:52:45.187 に答える
0

動的 SQL を回避する方法がわかりません。ただし、同義語を使用して最小化することをお勧めします (単純な行数ではなく、複数の複雑なクエリを実行すると仮定します)。

DECLARE @var NVARCHAR(8)

SET @var = '1234'

EXEC('create synonym synTable1 for Table1_' + @var)
EXEC('create synonym synTable2 for Table2_' + @var)
EXEC('create synonym synTable3 for Table3_' + @var)

SELECT COUNT(*) FROM synTable1
...

DROP SYNONYM synTable1
DROP SYNONYM synTable2
DROP SYNONYM synTable3
于 2012-08-30T18:04:37.133 に答える