2017-03-08 9 views
0

テーブルが今日作成された大きなデータベースのテーブルでは、すべてces_status = 'FINISHED'を知りたい。多くのテーブルでクエリを結合する

これは私が

select COUNT(*) 
from tbl_IADPRDSL1_15_04_05_140 with (nolock) 
WHERE ces_status='FINISHED' 

は、それが可能なの両方を組み合わせることである仕上げの状態を持っているどのように多く見つけることができ、これらのテーブルのいずれかのために、今日

SELECT [name] AS [TableName], [create_date] AS [CreatedDate] 
FROM sys.tables where create_date > '2017-03-08 00:00:00.000' 

私に作成されたすべてのテーブルを伝えますそれらのテーブルをすべてジョインすると、そのテーブルにその番号が与えられます。私はフロントエンドの開発者です。クエリビルダーを試してみましたが、私は運がありませんでした。

+1

データごとに異なるテーブルにデータを格納するのは、おそらく最適な設計ではありません。あなたはテーブルパーティションに慣れていますか/ –

+0

あなたはどこでもノックヒントを飛ばし続ける前にこれを覗いてみるかもしれません。 http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ –

+0

テーブルは3番目のアプリケーションからのものです。これは私が設計したテーブルではありません。 1つのクエリで情報を取得できるかどうかを調べたいと思います。データベースを照会する必要があるという理由だけで、データベースの設計をいくらか管理できるということを前提とすべきです。 – Bob

答えて

0

の2つのステップが:

1)これを実行します。

SELECT concat('SELECT * FROM ', [name], ' WHERE CES_Status=''FINISHED'' UNION ALL ') 
FROM sys.tables where create_date > '2017-03-08 00:00:00.000' 

は、上記のクエリの結果を取り、以下の交換貼り付けます。最後のUNION ALLステートメントも削除します。

SELECT COUNT(*) FROM (<results>) 

1つの手順で実行する必要がある場合、すべてが動的SQLでなければならず、もう少し難しいです。

+0

msg 207、レベル16、状態1、行1 'SELECT * FROM'列名が無効です。 メッセージレベル207、レベル16、状態1、行1 無効な列名 'WHERE CES_Status =' FINISHED 'UNION ALL' – Bob

+0

@rezaRahmatiはスペースの前にスペースがありません。 – xQbert

0

あなたがワンステップでそれをしたい場合、あなたはそれが唯一の一歩となります

declare @sql nvarchar(max) 
declare @date datetime 
set @date = '2017-02-08 00:00:00.000' 

SELECT @sql = COALESCE(@Sql + ' UNION ALL ', '') + concat(' SELECT Count(*), '''+[name]+''' as TableName FROM [', schema_name(schema_id) + '].[' + [name], '] with (nolock) WHERE ces_status=''FINISHED'' ') 
FROM sys.tables where create_date > @date 

Exec sp_executesql @sql 

以下のようにxQbertの答えを強化する必要があります。

関連する問題