0

毎週新しいテーブルを作成するCOTSアプリケーションデータベースを用意しています。このテーブルは、特定の命名規則に従い、常に同じ列を含んでいます。私は、特定の時間範囲内のテーブルを選択するためのクエリを書かれている: SQLフィードクエリーの結果をUnionにまとめます。

DECLARE @today VARCHAR(8) 
SET @today = CONVERT(VARCHAR(8),GETDATE(),112) 

DECLARE @monthold VARCHAR(8) 
SET @monthold = CONVERT(VARCHAR(8),dateadd(day,-31,@today),112) 

SELECT name 
FROM sys.tables 
WHERE name <= 'Event_Audit'+ @today AND name >= 'Event_Audit'+ @monthold 
AND name like 'Event_Audit%' 
ORDER BY name DESC 

は、今私は、データを集計するために選択されたテーブルの各クエリの呼び出しを持つ方法を探しています。これはSSRSレポートに使用されます。すべての付属のテーブルを通してTABLE1、テーブル2、など(5、それが4であるかどうか、またはそれ以上)が取り込まれます。このような

何か:

SELECT * 
FROM table1 
UNION ALL 
SELECT * 
FROM table2 
UNION ALL 
... 
ORDER BY EVENT_DATE DESC 

私はビュー、新しいテーブルを作成することはできません。既存のテーブルを変更することができます。

+1

動的SQLを使用する必要がありますが、実際の問題は何ですか? sp_executesqlを使ってみましたか? –

+0

私はT-SQLを使用しようとしていました。私は、動的SQLとsp_executesqlについてさらに読む予定です。 – CPickler

+0

私が今まで見てきたすべての記事は、私ができない新しいテーブルまたは一時テーブルを作成することを参照しています。アカウントには、レポートデータを取得するためのSQL DBへの読み取りアクセス権しかありません。 – CPickler

答えて

2

貧しいデザインは毎回困難な作業につながりますが、これも例外ではありません。私は今、毎月同じテーブルを繰り返し作成するというアイデアをあきらめるのは遅すぎると思っています。あなたが@Sqlを印刷し、それは大丈夫だ確認したらunremark、

DECLARE @today char(8) = CONVERT(char(8),GETDATE(),112), 
     @monthold char(8) = CONVERT(char(8),dateadd(day,-31,GETDATE()),112), 
     @sql nvarchar(max) = '' 



SELECT @Sql = @Sql + ' UNION ALL SELECT * FROM ' + name 
FROM sys.tables 
WHERE name <= 'Event_Audit'+ @today AND name >= 'Event_Audit'+ @monthold 
AND name like 'Event_Audit%' 
ORDER BY name DESC 

SET @SQL = STUFF(@SQL, 1, 11, '') + -- remove the first UNION ALL 
    ' ORDER BY EVENT_DATE DESC' -- add the ORDER BY 

PRINT @Sql 
--EXEC sp_executeSql @Sql 

あなたはsp_executesqlを実行するために、新規または一時テーブルを作成する必要はありませんが、あなただけのSQLスクリプトを生成する必要がありますEXEC行を開き、スクリプトを実行します。

+0

ありがとう、それは完璧に働いた。残念ながら、それはCOTS製品なので、私はDBテーブルを制御できません。 – CPickler

関連する問題