2010年3月23日火曜日

[SQL]特定の条件に一致するテーブルの内容を表示する

以前、マスタのみデータを抜きたいということがあり、1000件以下のテーブルのみ、内容の一覧を取得するSQLを書きました。件数の一覧を取るSQLの応用ですが、備忘録代わりにメモ。

--一時変数(結果格納用)
CREATE TABLE #TEMP_TABLE(
     T_NAME varchar(128)
    ,T_CNT int
)

--sp_MSforeachtableでユーザテーブル全部をループ処理
EXEC sp_MSforeachtable  @command1 ='INSERT INTO #TEMP_TABLE;SELECT ''?'' as T_NAME ,COUNT(*) as T_CNT FROM ?'


DECLARE @QUERY nvarchar(128--SQLの一時領域
DECLARE @NAME nvarchar(128--テーブル名一時領域
DECLARE @CNT int --カウント結果

--カーソルの宣言。このSQLの条件を変更することにより、テーブルを絞り込める
DECLARE cs CURSOR FOR
    SELECT T_NAME FROM #TEMP_TABLE WHERE T_CNT > 1 ORDER BY T_NAME

--カーソルのオープン
OPEN cs
FETCH NEXT FROM cs
    INTO @NAME
WHILE @@FETCH_STATUS = 0
BEGIN
    --SELECTを実行する
    PRINT '※※※※' + @NAME 
    SET @QUERY = 'SELECT * FROM ' + @NAME
    EXEC(@QUERY)
    FETCH NEXT FROM cs INTO @NAME
END

CLOSE cs
DEALLOCATE cs

--一時テーブルを削除する
DROP TABLE #TEMP_TABLE

0 件のコメント: