如何在mssql 2012中搜索和替换字符串

时间:2014-05-05 17:27:51

标签: sql sql-server sql-server-2012 ssms-2012

我必须在给定数据库的所有表中的所有列上查找并替换子字符串。

我在sqlserver 2012 ssms中尝试了此代码但导致http://www.dbtalks.com/uploadfile/anjudidi/find-and-replace-string-values-in-all-tables-and-column-in-s/ Find and Replace string Values in All Tables and column in SQL Serve

出错

我认为它适用于旧版本,它有一些以数字开头的表名称存在问题:示例dbo.123myTable

提前感谢所有帮助

错误打印:

  

Msg 102,Level 15,State 1,Line 1   “.153”附近的语法不正确。   更新dbo.153Test2dev SET [ALCDescription] = REPLACE(转换(nvarchar(max),[ALCDescription]),'TestsMT','Glan')WHERE [ALCDescription] LIKE'%SherlinMT%'   更新:1

     

Msg 102,Level 15,State 1,Line 1   “.153”附近的语法不正确。   UPDATE dbo.153TypeTest2 SET [FormTypeDescription] = REPLACE(convert(nvarchar(max),[FormTypeDescription]),'TestsMT','Glan')WHERE [FormTypeDescription] LIKE'%SherlinMT%'   更新:1

4 个答案:

答案 0 :(得分:0)

您确定表格名称可能以数字开头吗?如果是这样,请将它们包含在'['']'中,例如

UPDATE [dbo].[153TypeTest2].....

答案 1 :(得分:0)

正如猜测一样,要在表名中添加分隔符,请通过编辑此行来修改链接到的脚本:

    SET @sqlCommand = 'UPDATE ' + @schema + '.' + @table + ' SET [' + @columnName + '] = REPLACE(convert(nvarchar(max),[' + @columnName + ']),''' + @stringToFind + ''',''' + @stringToReplace + ''')'

并将其更改为

  SET @sqlCommand = 'UPDATE [' + @schema + '].[' + @table + '] SET [' + @columnName + '] = REPLACE(convert(nvarchar(max),[' + @columnName + ']),''' + @stringToFind + ''',''' + @stringToReplace + ''')'

答案 2 :(得分:0)

根据您链接的代码,试试这个:

SET @sqlCommand = 'UPDATE [' + @schema + '].[' + @table + '] SET [' + .....
--add square braces:      ^               ^ ^              ^                        

答案 3 :(得分:0)

您应该以与更新查询中的列名相同的方式括起您的表名(请参阅@table现在有括号):

SET @sqlCommand = 'UPDATE ' + @schema + '.[' + @table + '] SET [' + @columnName + '] = 
REPLACE(convert(nvarchar(max),[' + @columnName + '])