আমি খুব সাধারণ উদাহরণ দিয়ে শুরু করব: দুটি স্ক্রিন একই স্কিমাযুক্ত, উভয়ই পিকে ক্লাস্টারড, তবে যার একটিতে INSTEAD OF UPDATE
ট্রিগার রয়েছে:
CREATE TABLE Standard
(
PK UNIQUEIDENTIFIER PRIMARY KEY CLUSTERED,
V INT NOT NULL
)
GO
CREATE TABLE InsteadOf
(
PK UNIQUEIDENTIFIER PRIMARY KEY CLUSTERED,
V INT NOT NULL
)
GO
INSERT Standard (PK, V) VALUES ('1E58B555-B073-471E-B576-4B09C8E18976', 0)
INSERT InsteadOf (PK, V) VALUES ('1E58B555-B073-471E-B576-4B09C8E18976', 0)
GO
CREATE TRIGGER TR_InsteadOf_Update ON InsteadOf INSTEAD OF UPDATE
AS
BEGIN
DECLARE @PK UNIQUEIDENTIFIER
DECLARE @V INT
DECLARE @cursor CURSOR
SET @cursor = CURSOR FOR SELECT PK, V FROM Inserted
OPEN @cursor
FETCH NEXT FROM @cursor INTO @PK, @V
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE InsteadOf SET
V = @V
WHERE PK = @PK
FETCH NEXT FROM @cursor INTO @PK, @V
END
CLOSE @cursor
DEALLOCATE @cursor
END
GO
যদি আমি স্ট্যান্ডার্ড টেবিলের বিপরীতে কোনও আপডেটের জন্য ক্যোয়ারী পরিকল্পনাটি দেখি, তবে আমি প্রত্যাশিত ক্লাস্টেড সূচক আপডেটটি পাই:
UPDATE Standard SET
V = 1
WHERE PK = '1E58B555-B073-471E-B576-4B09C8E18976'
তবে আমি যদি ট্রিগারটির সাথে টেবিলের বিপরীতে অনুরূপ আপডেট সম্পাদন করি তবে ক্লাস্টারড সূচক inোকানো হিসাবে উপস্থিত ক্লাস্টারড সূচক আপডেট হিসাবে আমি পেয়েছি:
UPDATE InsteadOf SET
V = 1
WHERE PK = '1E58B555-B073-471E-B576-4B09C8E18976'
কেন? আমি এই ক্যোয়ারী প্ল্যানে (ক্লোরি # 4) পরে প্রত্যাশিত ক্লাস্টারড ইনডেক্স আপডেটটি দেখতে পাচ্ছি, তবে কেন # 1 কোয়েরিতে আমি এই অতিরিক্ত সন্নিবেশ পাব?