我们公司正在使用SQL Server 2008来管理网站的数据库。我们目前有一个名称更改,因此我需要更改所有旧公司名称。
数据库有多个表,每个表下有很多列,我只对查找和更新一个表中所有列的文本感兴趣。
基本上我需要做的是;在名为“Practices”的表中的所有列上找到字符串“CSQTC”,请注意某些列可能不包含字符串,并且列中的某些值可能为null。
我想我知道如何在多个列上搜索文本,但这是很多代码,我相信有更好的方法。这就是我认为我这样做的方式
WHERE columnName LIKE '%CSQTC%'
AND columnName2 LIKE '%CSQTC%'
AND columnName3 LIKE '%CSQTC%'
AND ....
当然有更好的方法吗?
谢谢堆!
编辑:我忘了问我如何将'CSQTC'的每次出现替换为'GPTQ'?再次感谢
答案 0 :(得分:0)
你可能会编写一个
的存储过程information_schema
)然后显然会调用该程序(除非您认为以后需要它,否则可以将其丢弃)。
对于替换部分,只需使用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' )
获取表格每列的更新说明。