2009年4月21日火曜日

[SQL]SQLServerのDB内に存際する全テーブルの件数取得(T-SQL)

先日、隣の人が全テーブルの件数を取得するために、全テーブル分SQLを書いていました。
「めんどくさそう」と他人事ながら思っていました。
で、その後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 @SQLN'@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 件のコメント :