ل SQL Server 2000 الغريب إدراج الزناد السلوك - العودية مثل
-
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 إدخالها في الجداول؟