【问题标题】:Searching for text over multiple columns?在多列中搜索文本?
【发布时间】:2014-02-26 22:18:15
【问题描述】:

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

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

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

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

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

肯定有更好的方法吗?

谢谢大家!

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

【问题讨论】:

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


    【解决方案1】:

    您可能会编写一个存储过程

    1. 查找表中包含文本的所有列(我不知道特别是 sql server,但使用 MySQL 你会在 information_schema 中查找)
    2. 对于每个匹配的列,执行更新请求以替换您想要的字符串。

    然后显然调用该过程(并且可能丢弃它,除非您认为以后需要它)。

    对于替换部分,可以简单使用REPLACE(columnName, 'CSQTC', 'GPTQ')(见REPLACE documentation at Microsoft's Technet

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

    【讨论】:

      【解决方案2】:

      你可以从这个开始:

      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' )
      

      获取表格每一列的更新指令。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-05
        • 2013-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多