我必须在给定数据库的所有表中的所有列上查找并替换子字符串。
我在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
答案 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 + '])