0

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

我从 sqlserver 2012 ssms 尝试了这段代码,但导致http://www.dbtalks.com/uploadfile/anjudidi/find-and-replace-string-values-in-all-tables-and-column-in-s出现错误/ 在 SQL Serve 的所有表和列中查找和替换字符串值

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

提前感谢所有帮助

错误打印:

消息 102,级别 15,状态 1,第 1 行 '.153' 附近的语法不正确。更新 dbo.153Test2dev SET [ALCDescription] = REPLACE(convert(nvarchar(max),[ALCDescription]),'TestsMT','Glan') WHERE [ALCDescription] LIKE '%SherlinMT%' 更新:1

消息 102,级别 15,状态 1,第 1 行 '.153' 附近的语法不正确。更新 dbo.153TypeTest2 SET [FormTypeDescription] = REPLACE(convert(nvarchar(max),[FormTypeDescription]),'TestsMT','Glan') WHERE [FormTypeDescription] LIKE '%SherlinMT%' 更新:1

4

4 回答 4

0

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

UPDATE [dbo].[153TypeTest2].....
于 2014-05-05T17:31:50.203 回答
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 + ''')'
于 2014-05-05T17:32:16.690 回答
0

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

SET @sqlCommand = 'UPDATE [' + @schema + '].[' + @table + '] SET [' + .....
--add square braces:      ^               ^ ^              ^                        
于 2014-05-05T17:32:59.923 回答
0

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

SET @sqlCommand = 'UPDATE ' + @schema + '.[' + @table + '] SET [' + @columnName + '] = 
REPLACE(convert(nvarchar(max),[' + @columnName + '])
于 2014-05-05T17:50:19.447 回答