如何更新数据库中所有表的列值的特定字符

时间:2015-07-14 11:04:33

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

我正在尝试更新Sql server 2008中数据库中所有表的列值的特定字符。我的所有表中都有_WORKGROUPNAME列,我想更改_WORKGROUPNAME中的某些字符在所有数据库表中。

_WORKGROUPNAME

的示例数据
COWAI1
COWAI2
PMWAI1
PMWAI2

需要结果

COXXX1
COXXX2
PMXXX1
PMXXX2

我想将WAI更改为XXX。我在SQL下面绑。

SELECT 'UPDATE ' + T.TABLE_SCHEMA + '.' + T.TABLE_NAME + ' 
SET _WORKGROUPNAME = N''XXX'  
FROM INFORMATION_SCHEMA.TABLES T 
INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON 
T.TABLE_NAME = C.TABLE_NAME AND c.COLUMN_NAME ='_WORKGROUPNAME' 
WHERE T.TABLE_TYPE = 'BASE TABLE' ORDER BY T.TABLE_SCHEMA, T.TABLE_NAME

但问题是上面的语句是将所有列值更新为XXX,但我想只将WAI更改为XXX。 如何实现这一点。

修改:

在所有表中_WORKGROUPNAME名称包含数据,WAI将在2个字符后出现。在WAI之后,它是一个可以是任意数字的数字。

例如

ASWAI1500
WEWAI900000
ASWAI96
DDWAI11111

2 个答案:

答案 0 :(得分:2)

只需将AND _WORKGROUPNAME = N'WAI'添加到您的WHERE子句中。

答案 1 :(得分:1)

试试这个

SELECT 'UPDATE ' + T.TABLE_SCHEMA + '.' + T.TABLE_NAME + ' 
SET _WORKGROUPNAME = replace(_WORKGROUPNAME,''WAI'',''XXX'')'  
FROM INFORMATION_SCHEMA.TABLES T 
INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON 
T.TABLE_NAME = C.TABLE_NAME AND c.COLUMN_NAME ='_WORKGROUPNAME' 
WHERE T.TABLE_TYPE = 'BASE TABLE' ORDER BY T.TABLE_SCHEMA, T.TABLE_NAME