2011-09-07 76 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

当您打印时,或仅在执行时,您是否收到该错误消息?您是否打印了试图调试输出的内容?抓住,但你有表或列的名称与空格? –