在多列上搜索文本?

时间:2014-02-24 05:09:30

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

我们公司正在使用SQL Server 2008来管理网站的数据库。我们目前有一个名称更改,因此我需要更改所有旧公司名称。

数据库有多个表,每个表下有很多列,我只对查找和更新一个表中所有列的文本感兴趣。

基本上我需要做的是;在名为“Practices”的表中的所有列上找到字符串“CSQTC”,请注意某些列可能不包含字符串,并且列中的某些值可能为null。

我想我知道如何在多个列上搜索文本,但这是很多代码,我相信有更好的方法。这就是我认为我这样做的方式

WHERE    columnName LIKE '%CSQTC%'
         AND columnName2 LIKE '%CSQTC%'
         AND columnName3 LIKE '%CSQTC%'
         AND ....

当然有更好的方法吗?

谢谢堆!

编辑:我忘了问我如何将'CSQTC'的每次出现替换为'GPTQ'?再次感谢

2 个答案:

答案 0 :(得分:0)

你可能会编写一个

的存储过程
  1. 查找表中包含文本的所有列(特别是我不知道sql server,但是使用MySQL,你会查看information_schema
  2. 对于每个匹配列,执行更新请求以替换所需的字符串。
  3. 然后显然会调用该程序(除非您认为以后需要它,否则可以将其丢弃)。

    对于替换部分,只需使用REPLACE(columnName, 'CSQTC', 'GPTQ')(参见REPLACE documentation at Microsoft's Technet

    P.S。有关如何获取表的列,请参阅SQL server query to get the list of columns in a table along with Data types, NOT NULL, and PRIMARY KEY constraints;有关sql server上的存储过程,请参阅SQL Server stored procedure beginner's guide [closed]

答案 1 :(得分:0)

你可以从这开始:

SELECT  c.name ,
        t.name
FROM    sysobjects o
        INNER JOIN syscolumns c ON c.id = o.id
        INNER JOIN systypes t ON t.xusertype = c.xusertype
WHERE   o.name = 'YourTableName'
        AND t.name IN ( 'varchar', 'nvarchar', 'text', 'ntext', 'char', 'nchar' )

获取表中包含文本的所有列。

你也可以这样做:

SELECT  'Update ' + QUOTENAME(o.name) + ' Set ' + c.name + ' = Replace(' + QUOTENAME(c.name) + ', ''CSQTC'', ''GPTQ'')'
        + ' Where ' + QUOTENAME(c.name) + ' LIKE ''%CSQTC%'''
FROM    sysobjects o
        INNER JOIN syscolumns c ON c.id = o.id
        INNER JOIN systypes t ON t.xusertype = c.xusertype
WHERE   o.name = 'YourTableName'
        AND t.name IN ( 'varchar', 'nvarchar', 'text', 'ntext', 'char', 'nchar' )

获取表格每列的更新说明。