所以我有大约150个SQL Server 2005数据库,它们大多是彼此的副本。每个人都有一个名为bvc_User的表,其中有一个名为PasswordChanged的字段。目前,PasswordChanged是一个可以为空的位字段。
我想将其所有实例更改为默认值为0的非可空位字段,并将当前表数据中的任何NULL值设置为1(是的,我不希望它们设置为默认值0)。
我可以分别更新NULL设置和已经存在的数据库值的相应更新,但我的主要问题是,我如何遍历服务器上的所有数据库,查找bvc_User表(不是服务器上的所有数据库都有它)如果存在,请更改PasswordChanged字段?
答案 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。