1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[SQLServer]入れ子のカーソルを使って、件数が1件以上のテーブル名一覧を作る

Posted at

やりたいこと

レコードの件数が1件以上存在するテーブル名の一覧が作りたい。

やっていること

対象にしたいテーブル名の一覧を作成して、その中の件数が1以上の場合に出力
※呼び出し側でログなどに出力してしまえば、リストが作れる

DECLARE @table_name NVARCHAR(128);
DECLARE @rec_count int;

DECLARE	CUR_TABLE CURSOR FOR
	select name from sys.tables where name like 'T\_%' ESCAPE '\'
	union all
	select name from sys.tables where name like 'D\_%' ESCAPE '\' 
	union all
	select name from sys.tables where name like 'M\_%' ESCAPE '\'
	union all
	select name from sys.tables where 
		name not like 'TMP\_%' ESCAPE '\' and
		name not like 'TT\_%' ESCAPE '\' and
		name not like 'PT\_%' ESCAPE '\' and
		name not like 'W\_%' ESCAPE '\' and
		name not like 'T\_%' ESCAPE '\' and
		name not like 'D\_%' ESCAPE '\' and
		name not like 'M\_%' ESCAPE '\' and
		name not like 'I\_%' ESCAPE '\' and
		name not like 'G\_%' ESCAPE '\' and
		name not like 'Z\_%' ESCAPE '\' ;

OPEN CUR_TABLE;

FETCH NEXT FROM CUR_TABLE INTO @table_name;

WHILE @@FETCH_STATUS = 0
BEGIN
	EXEC('DECLARE cr2 CURSOR FOR select count(*) from ' + @table_name)
	OPEN cr2
	FETCH NEXT FROM cr2 INTO @rec_count 
	CLOSE cr2
	DEALLOCATE cr2

	if @rec_count  > 0 PRINT @table_name

	FETCH NEXT FROM CUR_TABLE INTO @table_name;
END
CLOSE CUR_TABLE;
DEALLOCATE CUR_TABLE;

件数をどうやって取得して判定すりゃいいんじゃいと悩んだ。

<参考>
https://ameblo.jp/g-pinchan-new/entry-11496798995.html
https://www.atmarkit.co.jp/ait/articles/0209/03/news001.html

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?