ل SQL Server 2000 الغريب إدراج الزناد السلوك - العودية مثل

StackOverflow https://stackoverflow.com/questions/613447

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي الزناد في جدول في SQL Server 2000، وهذا هو الزناد:

ALTER Trigger [dbo].[Set_Asignado_State] ON [dbo].[Tables] 
FOR INSERT AS 
BEGIN           
    DECLARE @area varchar(1)
    SELECT @area = Table_Area_ID FROM inserted

    IF (@area = 'L')
    BEGIN
        INSERT INTO Table_History
        SELECT  (SELECT TOP 1 Table_Area_Id AS Table_Area_Id FROM inserted) AS Table_Area_Id,
                (SELECT SUBSTRING( CAST( YEAR( GETDATE() ) AS VARCHAR), 3, 2) ) AS Table_Year, 
                (SELECT TOP 1 Table_Seq AS Table_Seq FROM inserted) AS Table_Seq, 
                (SELECT TOP 1 ID FROM Table_Status WHERE Description = 'Asignado') AS Status, 
                '' AS Responsible, 
                (SELECT TOP 1 OrigDept FROM inserted) AS User_Responsible, 
                GETDATE() AS [DateTime],
                'None' AS Comments
        FROM Tables
        WHERE Tables.Table_Area_Id = (SELECT TOP 1 Table_Area_Id AS Table_Area_Id FROM inserted) AND
              Tables.Table_Year = (SELECT SUBSTRING(CAST(YEAR(GETDATE()) AS VARCHAR), 3, 2) )

        IF @@ERROR <> 0
        BEGIN
            DECLARE @errorMsg NVARCHAR(256)
            SET @errorMsg = @@ERROR; 

            PRINT 'Error Inserting in Table_History'

        END
    END
END

والآن، عندما إدراج سجل في "جداول"، ويسمى على الزناد ولكن يبقى إدخال العديد والعديد من السجلات على Table_History.

ولقد تحدثت مع زملائي ويبدو أن هناك شيء خاطئ! = S أي أدلة حول هذا؟ أفعل شيئا خاطئا؟

وشكرا مقدما =)

هل كانت مفيدة؟

المحلول

ويتم تعيين المشغلات يقوم، لذلك القيام
  IF (@area = 'L') سوف ننظر فقط في السجل الأول من الجدول المدرجة. حاول إضافة الاختيار كجزء من البند الخاص بك حيث:

WHERE Tables.Table_Area_Id = (SELECT TOP 1 Table_Area_Id AS Table_Area_Id FROM inserted) AND
              Tables.Table_Year = (SELECT SUBSTRING(CAST(YEAR(GETDATE()) AS VARCHAR), 3, 2) )  
 AND SUBSTRING(Tables.Table_Area_Id, 1, 1) = 'L'

هل أنت متأكد من أن العبارة تحديد الرئيسي لا يعود فقط صف واحد؟ وقد لاحظت أن كنت قد استخدمت الأعلى (1) تصفيات على نطاق واسع. اذا عاد أكثر من صف واحد ثم سيكون هناك أكثر من صف واحد إدراجها في جدول تاريخكم.

وربما في شكل حقنة أعمى، حاول وضع في الأعلى (1) لالأبعد تحديد:

    INSERT INTO Table_History
    SELECT TOP(1) (SELECT TOP 1 ...

وإلا فإنه يبدو كما لو كان لديك بعض العودية مستمرة في المشغل. لا أستطيع أن أرى ذلك، ولكن إذا كنت تريد، يمكنك إيقاف اثار العودية لقاعدة بيانات كاملة، نظرا لأنه هو خيار قاعدة البيانات.

نصائح أخرى

هل هناك سبب اخر على أن يكون الجدول Table_History إدخالها في الجداول؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top