「めんどくさそう」と他人事ながら思っていました。
で、その後sysobjectsというテーブルからテーブルの一覧を取得できることを知り、それを見て「できそう」と思ったのでやってみました(隣の人には内緒)。
動的SQLを順次実行することにより、結果を取得できるのですが、結果の出方がかっこ悪いので、テーブル変数(一時テーブル)に格納して結果を表示することにしました。コードはこんな感じ。
SET NOCOUNT ON
--テーブル変数(結果格納用)
DECLARE @TEMP_TABLE table(
T_NAME varchar(128)
,T_CNT int
)
DECLARE @NAME nvarchar(128) --テーブル名一時領域
DECLARE @SQL nvarchar(128) --実行するSQL
DECLARE @CNT int --カウント結果
--カーソルの宣言
DECLARE cs CURSOR FOR
SELECT NAME FROM sysobjects where type='U' ORDER BY NAME
--カーソルのオープン
OPEN cs
FETCH NEXT FROM cs
INTO @NAME
WHILE @@FETCH_STATUS = 0
BEGIN
--動的にSQLを組み立てる
SET @SQL = N'SELECT @CNT=COUNT(*) FROM ' + @NAME
--SQLを実行する
EXECUTE sp_executesql @SQL, N'@CNT int OUTPUT', @CNT OUTPUT
--実行した結果を一時テーブルに登録する
INSERT INTO @TEMP_TABLE VALUES(@NAME,@CNT)
FETCH NEXT FROM cs
INTO @NAME
END
CLOSE cs
DEALLOCATE cs
--実行結果を表示する
SELECT * FROM @TEMP_TABLE
SET NOCOUNT OFF
0 件のコメント:
コメントを投稿