T-SQL修改任何存在的数据库中的字段

时间:2011-01-28 16:20:38

标签: sql sql-server tsql

所以我有大约150个SQL Server 2005数据库,它们大多是彼此的副本。每个人都有一个名为bvc_User的表,其中有一个名为PasswordChanged的字段。目前,PasswordChanged是一个可以为空的位字段。

我想将其所有实例更改为默认值为0的非可空位字段,并将当前表数据中的任何NULL值设置为1(是的,我不希望它们设置为默认值0)。

我可以分别更新NULL设置和已经存在的数据库值的相应更新,但我的主要问题是,我如何遍历服务器上的所有数据库,查找bvc_User表(不是服务器上的所有数据库都有它)如果存在,请更改PasswordChanged字段?

2 个答案:

答案 0 :(得分:4)

您可以使用sp_msforeachdb在所有数据库上运行命令。请注意,我在实际使用之前检查了表的存在。

sp_msforeachdb '
  If Exists(Select 1 
            From   [?].Information_Schema.Tables 
            Where  Table_Name = ''bvc_User'')
    Update [?].dbo.bvc_User 
    Set    PasswordChanged = 1 
    Where  PasswordChanged Is NULL'

答案 1 :(得分:0)

三部分:获取db名称,循环遍历它们,执行动态sql:

DECLARE @dbNames TABLE (Id int IDENTITY, name nvarchar(50))

INSERT INTO @dbNames
SELECT name FROM sysdatabases

DECLARE @statement nvarchar(540)
DECLARE @dbName nvarchar(50)

DECLARE @maxId int

SELECT @maxId = MAX(Id) FROM @dbNames

DECLARE @i int

SET @i = 1

WHILE @i < @maxId
BEGIN
SEt @dbName = 'dbName'

SET @statement = 'USE ' + @dbName + CHAR(13) + '--execute table specific alter table logic here'

EXEC sp_ExecuteSql @statement
SET @i = @i + 1
END

HTH。