我有一個存儲過程,其中我在一種情況下遇到了一些困難。存儲過程之一中的問題
如何寫這個在1種條件下,基本上如果我從和它工作正常刪除的一切,但我也想補充一個條件,這樣,如果行的計數> 0
只有這樣在循環裏。
如何做到這一點,任何人都可以有任何想法。
這是我的實際SP:
ALTER PROCEDURE [dbo].[USP_Insert__DDL_Records_Into_FinalTable]
AS
BEGIN
DECLARE @DBName VARCHAR(50)
DECLARE @SQLTableDet VARCHAR(MAX)
DECLARE @SQLInsDet VARCHAR(MAX)
DECLARE @DelSQLTableDet VARCHAR(MAX)
DECLARE @Table_Name VARCHAR(20)
DECLARE @DestDB VARCHAR(20)
SET @DestDB = 'DB_Audit'
SET @Table_Name ='t_ddl_log'
DECLARE Database_Details CURSOR FOR
SELECT name
FROM
sys.databases
WHERE
database_id NOT IN (1,2,3,4)
AND
name <> 'DB_Audit' AND name <> 'DemoFatalCorruption1' AND name <> 'AdventureWorks' AND name <> 'AdventureWorks2008R2_Old' AND name <> 'AdventureWorks2008R2'
OPEN Database_Details
FETCH NEXT FROM Database_Details INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
IF (OBJECT_ID(+ @DBName + '.dbo.' + @Table_Name) IS NOT NULL)
AND ('SELECT CAST (COUNT(*) AS varchar(20)) FROM ' + @DBName + '.dbo.' + @Table_Name) > '0'
BEGIN
SET @SQLTableDet = ' INSERT INTO '+ @DestDB + '.dbo.'+ @Table_Name +
' SELECT * FROM ' + @DBName + '.dbo.' + @Table_Name
PRINT @SQLTableDet
SET @SQLInsDet = 'USE [' + @DBName + ']' + @SQLTableDet
PRINT @SQLInsDet
EXEC (@SQLInsDet)
SET @DelSQLTableDet = 'DELETE FROM ' + @DBName + '.dbo.' + @Table_Name
PRINT @DelSQLTableDet
EXEC (@DelSQLTableDet)
END
FETCH NEXT FROM Database_Details INTO @DBName
PRINT @DBName
END
CLOSE Database_Details
DEALLOCATE Database_Details
END
而且我有一個問題,這條線
IF (OBJECT_ID(+ @DBName + '.dbo.' + @Table_Name) IS NOT NULL)
AND ('SELECT CAST (COUNT(*) AS varchar(20)) FROM ' + @DBName + '.dbo.' + @Table_Name) > '0'
其中如果計數大於0,只有再向前下,但有些是怎麼回事即使計數爲0,也會進入循環內部
即使辛苦也沒有給我任何錯誤了,但它仍然是環路,將計數爲0 –
現在是時候給我們介紹一下你正在嘗試做的和多一點信息裏面去if語句之後的代碼。你的預期產出是多少? –
我正在爲審計創建一個存儲過程,其中如果任何數據庫有0個條目,它不應該進入循環,因爲那樣會花費大量不必要的時間。所以我試圖做的是我檢查一個條件,如果計數大於0,然後進入循環 –