我正在尝试更新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
答案 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