我做一個光標(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
我知道是否存在但我不知道我應該如何使用語法例如。
請幫助解決這個
不工作: 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