SQL Server ntext alanlarda REPLACE işlemi


SQL Server tablolarında ntext ve text alanlarda REPLACE komutu çalıştırılamıyor.Öyleyse bu alanlarda herhangi bir metini değiştirmek istediğimizde ne yapmalıyız ?

 

Dinamik içeriğe sahip bir sitede tüm sayfalarda yer alan bir telefon numarasını yenisiyle değiştirmek istediğimde T-SQL REPLACE komutunu kullanabilirim diye düşünmüştüm. Ancak komutu çalıştırdığımda ntext ve text alanlar için replace komutunun aşağıdaki gibi hata verdiğini gördüm.

Server: Msg 8116, Level 16, State 1, Line 1
Argument data type ntext is invalid for argument 1 of replace function.

SQL Server 'ın böyle bir hata döndürmesinin nedeni TEXT ya da NTEXT veri tipine sahip sütunlarda normal REPLACE komutunu işletemiyor olmamız. Çünkü SQL Server bu veri tipine sahip kolonlarda veriyi değil verinin saklandığı yeri gösteren 16 byte 'lık bir pointer 'ı saklıyor. Böyle bir pointer üzerinde de REPLACE komutunu çalıştıramıyoruz.

Biraz araştırdığımda aşağıdaki kodlarla ntext alanlar içinde replace yapılabildiğini gördüm. text tipindeki alana sahip bir tabloda ise yorumlarla belirtilen değişiklikleri gerçekleştirmek gerekiyor.

 


DECLARE
    @TextPointer BINARY(16),
    @TextIndex INT,
    @oldString NVARCHAR(32), -- text alan için VARCHAR  olmalı
    @newString NVARCHAR(32), --  text alan için VARCHAR olmalı
    @lenOldString INT,
    @currentDataID INT;
 
SET @oldString = N'444 0 849'; -- text alan için N kalkmalı
SET @newString = N'444 2 538'; -- text alan için  N kalkmalı
 
IF CHARINDEX(@oldString, @newString) > 0 
BEGIN
    PRINT 'Sonsuz döngüyü önlemek için çıkış';
END
ELSE
BEGIN
    SELECT 'Değiştirmeden Önce:';
 
    SELECT ID, ICERIK FROM ICERIK_AJTR where ICERIK like '%444 0 849%';
 
    SET @lenOldString = DATALENGTH(@oldString)/2; --  text alan için  /2  kalkmalı
 
    DECLARE irows CURSOR
        LOCAL FORWARD_ONLY STATIC READ_ONLY FOR
        SELECT
            ID
        FROM
          ICERIK_AJTR
        WHERE
            PATINDEX('%'+@oldString+'%', ICERIK) > 0;
 
    OPEN irows;
 
    FETCH NEXT FROM irows INTO @currentDataID;
 
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
 
        SELECT
            @TextPointer = TEXTPTR(ICERIK), 
            @TextIndex = PATINDEX('%'+@oldString+'%', ICERIK)
        FROM
           ICERIK_AJTR
        WHERE
            ID = @currentDataID;
 
        WHILE
        (
            SELECT
                PATINDEX('%'+@oldString+'%', ICERIK)
            FROM
              ICERIK_AJTR
            WHERE
                ID = @currentDataID
        ) > 0
        BEGIN
            SELECT
                @TextIndex = PATINDEX('%'+@oldString+'%', ICERIK)-1
            FROM
               ICERIK_AJTR
            WHERE
                ID = @currentDataID;
 
            UPDATETEXT ICERIK_AJTR.ICERIK @TextPointer @TextIndex @lenOldString @newString;
        END
 
        FETCH NEXT FROM irows INTO @currentDataID;
    END
 
    CLOSE irows;
 
    DEALLOCATE irows;
 
    SELECT 'Değişimden sonra:';
 
   SELECT ID, ICERIK FROM ICERIK_AJTR where ICERIK like '%444 0 849%' ;
   SELECT ID, ICERIK FROM ICERIK_AJTR where ICERIK like '%444 2 538%' ;
END

Bookmark and Share

  Kağıda Bas      Mail Gönder      Yorum Ekle   

«
                                                     
»
Workcube Çözümler
B2B - Partner Busines Portal / B2C - Business To Customer Portal / BCM - Budget Control Management / BPM - Business Process Management / CRM - Customer Relationship Management / DAM - Digital Asset Management / E-Business Portal Enterprise / E-Business Portal Plus / E-Business Portal Pro / E-Business Portal Standard / ECM - Enterprise Content Management / ERP - Enterprise Resource Planning / HR- Human Resource Management / LMS - Learning Management System / PAM - Physical Asset Management / PMS - Project Management System / SCM - Supply Chain Management / WorkcubeTV /

Workcube Modüller
Account (Customer & Supplier) Management / Accounting / Analysis and Reporting / B2B System Management / B2C System Management / Bank / Budget Planning / Calendar / Call Center Management / Campaign Management / Cash / Cheque / Content Management - Literature / Contract Management / Correspondence & Communication Management / Costs & Expenses / Credit and Fund Management / CTI System Integration / Current Accounts / Digital Archive / e-Profile / Executive Suite / Finance Management – General / Fixed Assets / Forum / HR – Career Portal / HR – Payrolls, Benefits and Compensations / HR – Performance Management / HR - Recruitment / Installment Sales / Inventory Management / Invoices / Learning Management / My Home - Personalization / Online Classroom and Streaming / Online Payment Integration / Online Procurement / Opportunity Management / Organization Planning / PDA Portal / Physical Asset Management / Planning and Scheduling / POS Integration / Price, Promotion and Action Management / Product Management / Production Management / Project Management / Purchase Proposals / Purchase Orders / Quota Planning / Risk and Assurance Management / Role Planning / Route (Visit) Management / Sales Orders / Sales Planning / Sales Proposals / Service and Warranty Management / Shipments and Logistics / Store – Branch Management / Subscription Management / System Management / Warehouse Management / Work Flow and Process Management / WorkDev Development Kit (Source Code) /


 
 

Canlı İletişim İş Ortağı Giriş Müşteri Giriş



Workcube e- business Inc.

www.workcube.com, info@workcube.com, contact: 90 216 428 39 39