Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在多个列上搜索文本?_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 在多个列上搜索文本?

Sql 在多个列上搜索文本?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我们公司使用SQL Server 2008来管理网站的数据库。我们目前有一个名称的变化,所以我需要改变我们的旧公司名称的所有事件 数据库有多个表,每个表下有很多列,我只对查找和更新一个表中所有列的文本感兴趣 基本上我需要能够做的是;在名为“Practices”的表中的所有列上查找字符串“CSQTC”,请注意,某些列可能不包含字符串,而这些列中的某些值可能为null 我想我知道如何在多个栏中搜索文本,但这需要很多代码,我相信有更好的方法。我想我就是这样做的 WHERE columnName

我们公司使用SQL Server 2008来管理网站的数据库。我们目前有一个名称的变化,所以我需要改变我们的旧公司名称的所有事件

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

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

我想我知道如何在多个栏中搜索文本,但这需要很多代码,我相信有更好的方法。我想我就是这样做的

WHERE    columnName LIKE '%CSQTC%'
         AND columnName2 LIKE '%CSQTC%'
         AND columnName3 LIKE '%CSQTC%'
         AND ....
肯定有更好的办法吗

谢谢你


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

您可以编写一个存储过程

  • 查找表中包含文本的所有列(我不太了解sql server,但使用MySQL时,您可以查看
    信息\u模式
  • 对于每个匹配的列,执行更新请求以替换所需的字符串
  • 然后很明显地调用这个过程(并且可能放弃它,除非您认为以后需要它)

    对于替换零件,只需使用
    REPLACE(columnName,'CSQTC','GPTQ')
    (请参阅)


    另请参阅,以了解如何获取表的列以及sql server上的存储过程。

    您可以从以下内容开始:

    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' )
    
    获取表中每列的更新说明