が存在しない場合、私はカーソル(MSSQL)行いますMS SQLクエリ - テーブル
CREATE TABLE #temp
(
DB VARCHAR(50),
Tab VARCHAR(50),
[COUNT] INT
)
DECLARE @db_name NVARCHAR (150)
DECLARE @tab1 NVARCHAR (150)
set @tab1 = 'dbo.test'
DECLARE c_db_names CURSOR FOR
SELECT name
FROM sys.databases
WHERE name like '%KNF%'
OPEN c_db_names
FETCH c_db_names INTO @db_name
WHILE @@Fetch_Status = 0
BEGIN
EXEC('
INSERT INTO #temp
SELECT ''' + @db_name + ''',''' + @tab1 + ''',COUNT(*) FROM ' + @db_name + '.' + @tab1 + '
')
FETCH c_db_names INTO @db_name
END
CLOSE c_db_names
DEALLOCATE c_db_names
SELECT * FROM #temp
DROP TABLE #temp
カーソルが各データベース・テーブル内の行数をカウントします。そのようなテーブルがない場合、エラーが発生します。
(1 row(s) affected)
(1 row(s) affected)
Msg 208, Level 16, State 1, Line 2
Invalid object name 'KNF_C.dbo.test'.
(2 row(s) affected)
明らかに、KNF_Cデータベースにはこのテーブルがないためです。そのような例外を処理するためにカーソル全体を使用したいと思います。
期待される結果:
DB Tab COUNT
KNF_A dbo.test 3
KNF_B dbo.test 7
KNF_C no table
私は存在が、私は方法を知っていけない場合、私は例ための構文を使用する必要があります知っています。
IF OBJECT_ID('dbo.table_name') IS NOT NULL
DO SOMETHING;
するか、sys.databasesのではなく、INFORMATION_SCHEMA.TABLESを使用します。
あなたがOBJECT_IDを使用してオブジェクトの存在を確認することができますSQL Server上でこの
いけない仕事: DB \tタブ\t COUNT KNF_A \tなしテーブル\t NULL KNF_B \tなしテーブル\t NULL KNF_C \tなしテーブル\t NULL – Ebasse
それsysobjectsがdb_nameを持つ必要があるため選択されたためです。私は編集しました。 – Avitus
結果はこれと同じですが、「無効なオブジェクト名 'KNF_B.sysobjects'」というエラーです。 – Ebasse