Most popular

วันอังคารที่ 27 กันยายน พ.ศ. 2554

ปัญหาการใช้ inserted,deleted ในการสร้าง Trigger (SQL Server 2000)

ปัญหานี้จะเกิดกับ Query ที่อยู่ใน Trigger ที่ไม่รู้จักกับ inserted หรือ deleted
Key Word 2 ตัวนี้มีความหมายคือ
  • INSERTED ก็คือข้อมูลปัจจุบันที่เพิ่งนำเข้ามาใน Table
  • DELETED ก็คือข้อมูลที่เพิ่งจะลบออกไป หรือเมื่อมีความต้องการที่จะลบ
ตัวอย่าง Query เจ้าปัญหา
DELETE FROM TABLE WHERE (TABLE_ID = deleted.ID

เมื่อต้องการจะ Execute จะเกิดปัญหาคือ การมองว่า inserted หรือ deleted เป็น Table หนึ่ง ที่ไม่มีอยู่จริง
"The column prefix 'deleted' does not match with a table name or alias name used in the query." 

การแก้ไขคือประกาศตัวแปรมารับค่าของข้อมูลที่ต้องการใช้งานจาก inserted หรือ deleted ก่อน เช่น

//ประกาศตัวแปรมารับค่าจาก Field
DECLARE @number char(4) , @open_id char(11)
//เอาตัวแปรไปรับค่าเก็บไว้ เพื่อใช้งานใน Query หลังจากนี้
SELECT @number=NUMBER,@open_id=OPEN_ID FROM deleted 

Code ด้านล่างนี้เป็นตัวอย่างการสร้าง trigger ให้ VIEW สามารถลบข้อมูลได้

CREATE TRIGGER delFormNum
ON dbo.VIEW_TKRNUMBERSTK
INSTEAD OF DELETE
AS
BEGIN
      DECLARE @number char(4) , @open_id char(11)

      SELECT @number=NUMBER,@open_id=OPEN_ID FROM deleted

      DELETE FROM TKR_OPENRECEIPTDTL
      WHERE (NUMBER = 
@number) AND (RECEIPT_CODE IS NULL);

      DELETE FROM TKR_OPENRECEIPT
      WHERE (OPEN_ID = @open_Id);

      COMMIT

END
GO 

ไม่มีความคิดเห็น:

แสดงความคิดเห็น