metin veya ntext veri türünde DEĞİŞTİR'e alternatifler


102

Datatable.column'daki verileri güncellemem / değiştirmem gerekiyor. Tablonun adlı bir alanı vardır Content. REPLACEİşlevi kullanıyorum . Sütun veri türü olduğundan NTEXT, SQL Server REPLACEişlevi kullanmama izin vermiyor .

Veri tipini değiştiremiyorum çünkü bu veritabanı 3. parti yazılım tablosu. Veri türünü değiştirmek, uygulamanın başarısız olmasına neden olur.

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = REPLACE(Content,'ABC','DEF') 
WHERE Content LIKE '%ABC%' 

Bu hatayı alıyorum:

Msg 8116, Düzey 16, Durum 1, Satır 1 Bağımsız değişken veri türü ntext, değiştirme işlevinin 1. bağımsız değişkeni için geçersiz.

  • Bunu T-SQL ile düzeltebilir miyim? Birisinin nasıl okunacağı ve döngü yapılacağı konusunda bir örneği var mı?
  • Bu tek seferlik dönüşüm olduğu için belki başka bir türe geçebilirim ama korkarım verileri karıştırıyorum.

Bir birincil anahtar alanı var: isim: Kimlik - tamsayı - bu bir kimlik .... Bu yüzden bunu da düşünmem gerekiyor. Kimliği geçici olarak N olarak ayarlayın.

Lütfen DEĞİŞTİR işlevini nasıl elde edeceğiniz konusunda tavsiyede bulunun.

Yaklaşık. 3000 deyimin yeni bir çözümle güncellenmesi gerekiyor.


Bu SQL Server 2000 mi?
p.campbell

CEVAP: SQL2008 kullanıyorum ... ve DATABASE Uyumluluk seviyesi 2000 (80) 'e sahip. Bunu da değiştirirsem 2008 çalışacak mı? Henüz sonuçlarını bilmediğim için uyumluluk düzeyini 2000'de bıraktım, ancak SQL 2008 Veritabanı. bu bir defalık dönüşüm ...
ethem

Yanıtlar:


199

EĞER veri 4000 karakter taşması olmaz VE SQL Server 2000 veya 2000 8 veya SQL Server uyumluluk seviyedeyiz:

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = CAST(REPLACE(CAST(Content as NVarchar(4000)),'ABC','DEF') AS NText)
WHERE Content LIKE '%ABC%' 

SQL Server 2005+ için:

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = CAST(REPLACE(CAST(Content as NVarchar(MAX)),'ABC','DEF') AS NText)
WHERE Content LIKE '%ABC%' 

3
Hızlı bir soru, ikinci oyuncu NTextgerçekten gerekli mi? Atamanın otomatik olarak NVarchar(MAX)yapılacağını NTextdüşünürdüm.
Tahir Hassan

3
Harika, basit bir düzeltme. 2005+ nvarchar'ın (maks.) 4000 karakter sınırına sahip olmadığını unutmayın. Bunun açık olduğunu biliyorum (şimdi benim için), ama önce her iki cevabın da bu limiti varmış gibi okudum.
goodeye

16

SQL Server 2000 varsayıldığında, aşağıdaki StackOverflow sorusu sorununuzu ele almalıdır.

SQL Server 2005/2008 kullanıyorsanız, aşağıdaki kodu kullanabilirsiniz ( buradan alınmıştır ):

select cast(replace(cast(myntext as nvarchar(max)),'find','replace') as ntext)
from myntexttable
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.