批量替换有问题的人物

时间:2014-07-03 00:53:27

标签: sql sql-server sql-server-2008

因为this issue因此我面临着更换多个表格和字段中的角色的任务。这是一个在一个table.field位置处理它的查询:

update productWebSource set ProductName = replace(ProductName, 'Â', '')  where ProductName LIKE '%Â%'

正如您从查询中看到的那样,并且正如我在其他帖子中所解释的那样(上面已经链接过),SQLServer TableDiff给了我一个不需要的''字符是某些tables.fields。有没有办法可以编写一个查询,可以在mt整个数据库中找到并替换'Â'的所有实例,并用''替换它们?

这是一个SQLServer 2008R2数据库

1 个答案:

答案 0 :(得分:0)

您可以通过动态生成SQL更新语句来完成此操作。下面的代码将为数据库中包含VARCHAR或NVARCHAR列的每个表创建一个UPDATE语句,并更新这些列以删除不需要的字符。下面的代码实际上没有进行任何更改,它只是创建更新语句。然后你可以复制&粘贴所有返回的行并运行SQL。

WITH tblclmns AS (
    SELECT tbl.name AS tblname, clmn.name AS clmnname
    FROM sys.columns AS clmn
    INNER JOIN sys.types AS t ON clmn.system_type_id=t.system_type_id
    INNER JOIN sys.tables AS tbl ON tbl.object_id=clmn.object_id
    WHERE t.name IN ('varchar','nvarchar')
)
SELECT 'UPDATE ' + tblname + ' SET ' +
    STUFF((
        SELECT ', ' + CAST(clmnname AS VARCHAR(MAX)) + '=REPLACE(' + clmnname + ',CHAR(194),'''')'
        FROM tblclmns
        FOR XML PATH(''),TYPE).value('.','VARCHAR(MAX)'),1,2,'') AS updtClmns
FROM tblclmns
GROUP BY tblname

声明

上面的代码未经测试,当您运行生成的SQL时,它将导致整个数据库被修改。这可能会给SQL服务器带来沉重的负担(在工作时间不要在生产中执行)并且您必须仔细检查生成的代码以确保您不更新任何不应该更新的表或列并且它赢得了'做任何你不想要的事情。使用风险自负......