কোনও কোড দৃষ্টিকোণ থেকে জীবনকে nvarchar(max)
পিছনে রূপান্তর করা ntext
জীবনকে সহজ করে তোলে, তবে এর অর্থ হ'ল সমস্ত সিপিইউ এবং লগিং ওভারহেড যা বোঝায় তার সাথে পুরো (সম্ভবত খুব বড়) মানটি রূপান্তর এবং পুনর্লিখন।
একটি বিকল্প ব্যবহার করা হয় UPDATETEXT
। এটি ঠিক যেমনটি ntext
হ্রাস করা হয় তবে এটি লগিং ওভারহেডকে উল্লেখযোগ্যভাবে হ্রাস করতে পারে। ডাউনসাইডে, এর অর্থ পাঠ্য পয়েন্টার ব্যবহার করা এবং এটি একবারে কেবল একটি সারিতে কাজ করে।
নিম্নলিখিত সীমাবদ্ধতার চারপাশে কাজ করার জন্য নিম্নলিখিত উদাহরণ কোডটি একটি কার্সার ব্যবহার PATINDEX
করে এবং এর পরিবর্তে ব্যবহার করে CHARINDEX
যেহেতু প্রাক্তন কয়েকটি ফাংশন যা সরাসরি কাজ করে তাদের মধ্যে একটি ntext
:
নমুনা তথ্য
CREATE TABLE dbo.PhilsTable
(
comment ntext NULL,
anothercomment nvarchar(50) NULL
);
INSERT dbo.PhilsTable
(comment, anothercomment)
VALUES
(
CONVERT(ntext,
N'This is a test UPDATEHERE This is the end of the test ' +
REPLICATE (CONVERT(nvarchar(max), N'x'), 1000000)),
CONVERT(nvarchar(50), N'. This is inserted.')
),
(
CONVERT(ntext,
N'This is a test UPDATEHERE This is the end of the test ' +
REPLICATE (CONVERT(nvarchar(max), N'x'), 1000000)),
CONVERT(nvarchar(50), N'. This is inserted.')
),
(
CONVERT(ntext,
N'This is a test UPDATEHERE This is the end of the test ' +
REPLICATE (CONVERT(nvarchar(max), N'x'), 1000000)),
CONVERT(nvarchar(50), N'. This is inserted.')
);
কার্সার ঘোষণা
DECLARE c
CURSOR GLOBAL
FORWARD_ONLY
DYNAMIC
SCROLL_LOCKS
TYPE_WARNING
FOR
SELECT
TxtPtr = TEXTPTR(PT.comment),
Src = PT.anothercomment,
Offset = PATINDEX(N'%UPDATEHERE%', PT.comment) + LEN(N'UPDATEHERE') - 1
FROM dbo.PhilsTable AS PT
WHERE
PT.comment LIKE N'%UPDATEHERE%'; -- LIKE works with ntext
OPEN c;
প্রক্রিয়া লুপ
DECLARE
@Ptr binary(16),
@Src nvarchar(50),
@Offset integer;
SET STATISTICS XML OFF; -- No cursor fetch plans
BEGIN TRANSACTION;
WHILE 1 = 1
BEGIN
FETCH c INTO @Ptr, @Src, @Offset;
IF @@FETCH_STATUS = -2 CONTINUE; -- row missing
IF @@FETCH_STATUS = -1 BREAK; -- no more rows
IF 1 = TEXTVALID('dbo.PhilsTable.comment', @Ptr)
BEGIN
-- Modify ntext value
UPDATETEXT dbo.PhilsTable.comment @Ptr @Offset 0 @Src;
END;
END;
COMMIT TRANSACTION;
CLOSE c; DEALLOCATE c;