ทางเลือกอื่นในการ REPLACE ในประเภทข้อมูลข้อความหรือ ntext


102

ฉันต้องการอัปเดต / แทนที่ข้อมูลใน datatable.column Contentตารางมีฟิลด์ชื่อ ฉันกำลังใช้REPLACEฟังก์ชัน เนื่องจากประเภทข้อมูลคอลัมน์คือNTEXTSQL Server ไม่อนุญาตให้ฉันใช้REPLACEฟังก์ชันนี้

ฉันไม่สามารถเปลี่ยนประเภทข้อมูลได้เนื่องจากฐานข้อมูลนี้เป็นตารางซอฟต์แวร์ของบุคคลที่สาม การเปลี่ยนประเภทข้อมูลจะทำให้แอปพลิเคชันล้มเหลว

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

ฉันได้รับข้อผิดพลาดนี้:

ข่าวสารเกี่ยวกับ 8116 ระดับ 16 สถานะ 1 บรรทัด 1 อาร์กิวเมนต์ชนิดข้อมูล ntext ไม่ถูกต้องสำหรับอาร์กิวเมนต์ 1 ของฟังก์ชันการแทนที่

  • ฉันสามารถแก้ไขปัญหานี้ด้วย T-SQL ได้หรือไม่ ใครมีตัวอย่างวิธีอ่านและวนซ้ำ?
  • เนื่องจากนี่เป็นการแปลงครั้งเดียวฉันอาจเปลี่ยนเป็นประเภทอื่นได้ แต่กลัวว่าจะทำให้ข้อมูลยุ่งเหยิง

มีฟิลด์คีย์หลักชื่อ: ID - จำนวนเต็ม - เป็นข้อมูลประจำตัว .... ดังนั้นฉันต้องคิดถึงเรื่องนี้ด้วย อาจตั้งค่า Identity เป็น N ชั่วคราว

กรุณาให้คำแนะนำเกี่ยวกับวิธีการบรรลุฟังก์ชัน REPLACE?

ประมาณ. งบ 3000 ต้องได้รับการปรับปรุงโซลูชันใหม่


SQL Server 2000 นี้หรือไม่
แคมป์เบลล์

คำตอบ: ฉันใช้ SQL2008 ... และฐานข้อมูลมีระดับความเข้ากันได้ 2000 (80) ถ้าฉันเปลี่ยนสิ่งนี้ด้วยในปี 2008 จะใช้งานได้หรือไม่ เนื่องจากฉันไม่ทราบผลที่ตามมา แต่ฉันออกจากระดับความเข้ากันได้ 2000 แต่เป็นฐานข้อมูล SQL 2008 นี่คือการกลับใจครั้งเดียว ...
ethem

คำตอบ:


198

หากข้อมูลของคุณไม่เกิน 4000 อักขระและคุณอยู่ใน SQL Server 2000 หรือระดับความเข้ากันได้ 8 หรือ SQL Server 2000:

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+:

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
คำถามสั้น ๆ การคัดเลือกครั้งที่สองNTextจำเป็นจริงหรือ? ฉันคิดว่าการมอบหมายNVarchar(MAX)ให้NTextจะส่งโดยอัตโนมัติ
Tahir Hassan

3
แก้ไขง่ายมาก โปรดทราบว่า nvarchar (สูงสุด) ปี 2005+ ไม่มีขีด จำกัด 4000 ถ่าน ฉันรู้ว่ามันชัดเจน (ตอนนี้สำหรับฉัน) แต่ก่อนอื่นฉันอ่านราวกับว่าทั้งสองคำตอบมีขีด จำกัด
goodeye

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.