T-SQL для изменения поля в любой базе данных, где оно существует - PullRequest
1 голос
/ 28 января 2011

Итак, у меня есть около 150 баз данных SQL Server 2005, все в основном копии друг друга.Каждый из них имеет таблицу с именем bvc_User, которая имеет поле с именем PasswordChanged.На данный момент PasswordChanged является битовым полем, допускающим значение NULL.

Я хочу изменить все его экземпляры на битовое поле, не допускающее NULL, со значением по умолчанию, равным 0, и для любых значений NULL, которые в настоящее время находятся в данных таблицы, равным 1да, я не хочу, чтобы для них было установлено значение по умолчанию 0).

Возможно, я могу выполнить обновление параметра NULL и соответствующее обновление уже существующих значений базы данных отдельно, но мой основной вопрос заключается в том,как я могу просмотреть все базы данных на сервере, найти таблицу bvc_User (не у всех БД на сервере) и, если она существует, изменить поле PasswordChanged?

Ответы [ 2 ]

4 голосов
/ 28 января 2011

Вы можете использовать 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'
0 голосов
/ 28 января 2011

Три части: получить имена БД, пройтись по ним, выполнить динамический 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

НТН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...