2010-12-03 151 views
72

我需要更新/替換datatable.column中的數據。該表有一個名爲Content的字段。我正在使用REPLACE函數。由於列數據類型爲NTEXT,因此SQL Server不允許使用REPLACE函數。REPLACE替代文本或ntext數據類型

我無法更改數據類型,因爲此數據庫是第三方軟件表。更改數據類型將導致應用程序失敗。

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

我收到此錯誤:

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

  • 我能解決這個問題用T-SQL?有人有一個例子如何閱讀和循環?
  • 由於這是一次性轉換,也許我可以更改爲另一種類型,但恐怕我搞亂了數據。

有一個主鍵字段:名稱:ID - 整數 - 這是一個身份....所以我也需要考慮這一點。也許將身份設置爲N臨時。

請告知如何實現REPLACE功能?

約。需要使用新解決方案更新3000條語句。

+0

這是SQL Server 2000嗎? – 2010-12-03 01:19:09

+0

解答:我正在使用SQL2008 ...並且DATABASE具有兼容級別2000(80)。如果我也改變這個2008年,它會繼續工作嗎?因爲我不知道我在兼容級別2000下的結果,但它是SQL 2008數據庫。 這是一次性轉換... – ethem 2010-12-03 01:26:29

回答

159

IF你的數據不會溢出4000個字符你在SQL 8或SQL Server 2000的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%' 
11

假設SQL Server 2000,以下StackOverflow question應該解決您的問題。

如果使用SQL Server 2005/2008,可以使用下面的代碼(從here拍攝):

select cast(replace(cast(myntext as nvarchar(max)),'find','replace') as ntext) 
from myntexttable 
+0

+1:好的鮑比! – 2010-12-03 01:24:18

相關問題