0

更新トリガーにこのクエリがあります

UPDATE [FSSQLPROD01].[collectionsDELETE].[dbo].[collections] 
SET 
    Defendant_1 = i.DisplayName 
    , Loan_Number_1 = i.Comments 
    , Client = i.KS_BookName 
    , Date_Instructed = i.OpenDate 
    , Person_Responsible_name = i.ResponsibleFeeEarnerName 
    , Person_Responsible_Email = i.ResponsibleFeeEarnerEmail 
    , Person_Acting_name = i.BillingFeeEarnerName 
    , Person_Acting_email = i.BillingFeeEarnerEmail 
    , Agent_Acting_name = i.BillingFeeEarnerName 
    , Agent_Acting_email = i.BillingFeeEarnerEmail 
    , CBA_Panel_Service_Area = i.KS_ServiceCat 
    , HBN_Number = i.KS_ClientAcctRef 
    , St_George_Contact = i.KS_Instructor 
FROM 
    [FSSQLPROD01].[collectionsDELETE].[dbo].[collections] c
INNER JOIN 
    Inserted i
ON
    Left(c.file_number, 6) COLLATE DATABASE_DEFAULT = i.MatterNumber COLLATE DATABASE_DEFAULT

ここに画像の説明を入力 Join 接続は File_Number (例: 70003-1) で一致しますが、不明な理由により、この行に更新する必要があるデータが完全にランダムな行 614864-7 に更新されています。

引き続きトリガーを実行して 70003-1 行を更新することはできますが、他の行 614864-7 を更新し続けます。

これは、リンクされたサーバー全体で実行されています。トリガーは、他のサーバーとデートしている1つのサーバー上にあります

サーバー tigger は Microsoft SQL Server 2005 - 9.00.3042.00 (X64) Feb 10 2007 00:59:02 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition (64-bit) o​​n Windows NT 5.2 (Build 3790: Service Pack 2) )

サーバー トリガーが Microsoft SQL Server 2005 を更新中 - 9.00.3042.00 (X64) 2007 年 2 月 10 日 00:59:02 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition (64-bit) o​​n Windows NT 5.2 (Build 3790: Service Pack 2) )

サーバーの SP を SP4 に更新すると問題が解決するのではないかと考えていました。

これがサーバーを悩ませている理由を誰もが知っていますか

修正

ええ、私は実際に値をハードコーディングし、SQLステートメントを単純化して、正常に機能するようにしました

DECLARE @MatterNumber as varchar(50)
SET @MatterNumber = (SELECT i.MAtternumber FRom Inserted as i) + '-1'
Print @MatterNumber

UPDATE [FSSQLPROD01].[collectionsDELETE].[dbo].[collections] 
       SET Loan_Number_1 = ‘123’
       WHERE file_number =  @MatterNumber

しかし、Declared Varible 値を Loan_Number_1 または他の列のいずれかに設定するとすぐに、問題が発生し始めます。

DECLARE @LoanNumber as varchar(50)
SET @LoanNumber =    (SELECT i.Comments FRom Inserted as i)
    Print @LoanNumber
DECLARE @MatterNumber as varchar(50)
SET @MatterNumber = (SELECT i.MAtternumber FRom Inserted as i) + '-1'

Print @MatterNumber –-I print here I see 70003-1

UPDATE [FSSQLPROD01].[collectionsDELETE].[dbo].[collections] 
       SET Loan_Number_1 = @LoanNumber

       WHERE file_number =  @MatterNumber

Print @MatterNumber –-I print here I see 70003-1
4

2 に答える 2

0
UPDATE [FSSQLPROD01].[collectionsDELETE].[dbo].[collections] 
SET 
    Defendant_1 = i.DisplayName 
    , Loan_Number_1 = i.Comments 
    , Client = i.KS_BookName 
    , Date_Instructed = i.OpenDate 
    , Person_Responsible_name = i.ResponsibleFeeEarnerName 
    , Person_Responsible_Email = i.ResponsibleFeeEarnerEmail 
    , Person_Acting_name = i.BillingFeeEarnerName 
    , Person_Acting_email = i.BillingFeeEarnerEmail 
    , Agent_Acting_name = i.BillingFeeEarnerName 
    , Agent_Acting_email = i.BillingFeeEarnerEmail 
    , CBA_Panel_Service_Area = i.KS_ServiceCat 
    , HBN_Number = i.KS_ClientAcctRef 
    , St_George_Contact = i.KS_Instructor 
FROM

    Inserted i
where
    Left([FSSQLPROD01].[collectionsDELETE].[dbo].[collections] .file_number, 6) COLLATE DATABASE_DEFAULT = i.MatterNumber COLLATE DATABASE_DEFAULT
于 2012-11-08T07:16:32.267 に答える
-4

トリガーは、単一のレコードの更新用です。一括挿入/更新を行う場合、それらは機能しません。SQL Server triggers runs only 1 time per UPDATE. 1 つのステートメントで 3000 行を変更している場合、トリガーは 3000 回起動しないためです。トリガーは 1 回だけ起動します。これが、ランダム行を更新している理由です(ただし、最初の行である必要があります)。

于 2012-11-08T03:41:35.920 に答える