--一時変数(結果格納用)
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
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 件のコメント:
コメントを投稿