2011-09-07 74 views
1

我需要有一個搜索和替換功能,它將搜索表中的所有列,並將替換所有的逗號<,>,雙引號<「> ,和單引號<「>用的空間,我已經通過博客去像http://vyaskn.tripod.com/sql_server_search_and_replace.htm但該方法不起作用如何使用搜索和替換表中的所有列

+1

什麼不起作用?你指出的解決方案看起來很有希你有什麼嘗試?你面臨什麼問題? –

+0

我需要它只在一個表上工作,而不是在整個數據庫中的所有表上工作。上述存儲過程也不適用於整數,小數,數字數據類型。 \t \t \t有它僅適用於我用這一個表: - 聲明@tablename \t \t爲nvarchar(50)=「t_recur」,並使用它僅適用於我已刪除了部分表列的地方設置表名對於數據庫中的所有表格Plz advice – user932809

+2

您希望替換工作在int/decimal/numeric上嗎?恐怕你運氣不好。如果你在這些列中看到逗號等,這是因爲它們是如何呈現的,而不是它們如何存儲。 –

回答

2

取出逗號:。

update mytable 
    set myColumn = REPLACE(myColumn, ",", " ") 

對於雙引號:

update mytable 
    set myColumn = REPLACE(myColumn, "''", " ") 

對於單引號:

update mytable 
    set myColumn = REPLACE(myColumn, "'", " ") 

欲瞭解更多信息,請參閱:http://msdn.microsoft.com/en-us/library/ms186862.aspx

+0

OP需要一個解決方案來替換表中的所有列。 –

+0

嗨克里斯,感謝您的迴應,但作爲阿德里安提到我需要一個命令來執行所有列sys.columns r類似的東西。 – user932809

3
DECLARE @table NVARCHAR(257) = N'dbo.table_name'; 

DECLARE @sql NVARCHAR(MAX) = N'UPDATE ' + @table + ' SET '; 

SELECT @sql = @sql + CHAR(13) + CHAR(10) 
    + QUOTENAME(name) + ' = ' 
    + ' REPLACE(REPLACE(REPLACE(' 
    + QUOTENAME(name) 
    + ','','', '''')' 
    + ',''"'', '''')' 
    + ',''' + CHAR(39) + CHAR(39) + ''', ''''),' 
FROM sys.columns 
WHERE system_type_id IN (167, 175, 231, 239) 
AND [object_id] = OBJECT_ID(@table); 

SET @sql = LEFT(@sql, LEN(@sql)-1) + ';'; 

PRINT @sql; 
--EXEC sp_executesql @sql; 
+0

更正了針對sys.types的檢查,以改爲使用system_type_id常量。既然有可能,你可以用'CREATE TYPE not_a_char FROM int;'來遊戲它...... –

+0

Hi Aaron,謝謝你的解決方案。但是當我執行它時,它給了我以下錯誤: - Msg 102,Level 15,State 1,Line 1 「SE」附近的語法錯誤。你可以請建議一些解決方案。提前致謝。 – user932809

+0

當您打印時,或僅在執行時,您是否收到該錯誤消息?您是否打印了試圖調試輸出的內容?抓住,但你有表或列的名稱與空格? –