1つのストアドプロシージャがあり、1つの条件でいくつかの問題があります。私もそのように、行のカウントがループ内だけなので、その後> 0
ある場合は、1つの以上の条件を追加したいどのように私はとからすべてを削除した場合、基本的にはそれが正常に動作し、1つの状態でこれを書くことではなく、ストアドプロシージャの1つで問題が発生しました
。
どのように行うには、誰もが考えていることができます。
これは私の実際の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
そして、私はカウントが0より大きい場合だけにして前方に移動そのうちこのライン
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 –
である私たちにあなたがやろうとしているかについて、もう少し情報を提供するための時間であるループ内で起こっていますif文の後のコード。期待される成果は? –
私はAuditのストアプロシージャを作成しています。データベースのいずれかに0のエントリがある場合、ループ内に入るべきではありません。なぜなら、不要な時間が掛かっているからです。だから私がやろうとしていたのは、カウントが0より大きい場合にのみ条件をチェックすることです。ループの中に入ってください。 –