Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Отключить проверку существования базы данных.  [new]
Meriguan
Member

Откуда:
Сообщений: 124
Всем привет!

Нужен SQL скрипт, который проходит по всем базам на сервере и делает изменения в некоторых таблицах, то есть нужно переключаться между базами внутри скрипта(USE DatabaseName). Проблема в том, что некоторые базы на сервере могут отсутствовать и когда скрипт компилируется, он делает проверку на наличие базы на сервере и если базы нет сразу падает.
Вопрос, можно ли отключить эту проверку?
Если нет, прийдет делать через динамический SQL...
7 июл 15, 12:04    [17861423]     Ответить | Цитировать Сообщить модератору
 Re: Отключить проверку существования базы данных.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Meriguan
Проблема в том, что некоторые базы на сервере могут отсутствовать

Это как, если " скрипт, который проходит по всем базам на сервере" ?
7 июл 15, 12:05    [17861434]     Ответить | Цитировать Сообщить модератору
 Re: Отключить проверку существования базы данных.  [new]
0-0
Guest
Meriguan,

делайте динамический запрос.
Либо разбивайте скрипт GO - в этом случае скрипт выдаст ошибки, но выполнится до конца (там, где будет существовать таблица\база)
7 июл 15, 12:06    [17861444]     Ответить | Цитировать Сообщить модератору
 Re: Отключить проверку существования базы данных.  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1914
Meriguan
Всем привет!

Нужен SQL скрипт, который проходит по всем базам на сервере и делает изменения в некоторых таблицах, то есть нужно переключаться между базами внутри скрипта(USE DatabaseName). Проблема в том, что некоторые базы на сервере могут отсутствовать и когда скрипт компилируется, он делает проверку на наличие базы на сервере и если базы нет сразу падает.
Вопрос, можно ли отключить эту проверку?
Если нет, прийдет делать через динамический SQL...



Что в вашем понимании "могут отсутствовать"?
если у вас в скрипте статично забит список баз по которым бегает скрипт то советую воспользоваться sp_msforeachdb
7 июл 15, 12:14    [17861522]     Ответить | Цитировать Сообщить модератору
 Re: Отключить проверку существования базы данных.  [new]
Meriguan
Member

Откуда:
Сообщений: 124
Glory
Meriguan
Проблема в том, что некоторые базы на сервере могут отсутствовать

Это как, если " скрипт, который проходит по всем базам на сервере" ?


Я имею ввиду, я явно указываю все возможные базы данных, затем делаю проверку какая из них существует.

USE Master

IF EXISTS (
SELECT 1
FROM sys.databases
WHERE name = 'DatabaseName_1'
)
BEGIN
USE DatabaseName_1
...
END

GO

USE Master

IF EXISTS (
SELECT 1
FROM sys.databases
WHERE name = 'DatabaseName_2'
)
BEGIN
USE DatabaseName_2
...
END
7 июл 15, 12:15    [17861534]     Ответить | Цитировать Сообщить модератору
 Re: Отключить проверку существования базы данных.  [new]
Meriguan
Member

Откуда:
Сообщений: 124
felix_ff
Meriguan
Всем привет!

Нужен SQL скрипт, который проходит по всем базам на сервере и делает изменения в некоторых таблицах, то есть нужно переключаться между базами внутри скрипта(USE DatabaseName). Проблема в том, что некоторые базы на сервере могут отсутствовать и когда скрипт компилируется, он делает проверку на наличие базы на сервере и если базы нет сразу падает.
Вопрос, можно ли отключить эту проверку?
Если нет, прийдет делать через динамический SQL...



Что в вашем понимании "могут отсутствовать"?
если у вас в скрипте статично забит список баз по которым бегает скрипт то советую воспользоваться sp_msforeachdb


Могут отсутствовать: есть много дев и тест серверов и на каждом из них могут быть отресторены разные базы с прода.
Спасибо за sp_msforeachdb, но если я понял процедура выполняет один и тот же запрос в каждой базе, а у меня на каждую базу отдельный запрос.
7 июл 15, 12:24    [17861600]     Ответить | Цитировать Сообщить модератору
 Re: Отключить проверку существования базы данных.  [new]
0-0
Guest
Meriguan
felix_ff
пропущено...



Что в вашем понимании "могут отсутствовать"?
если у вас в скрипте статично забит список баз по которым бегает скрипт то советую воспользоваться sp_msforeachdb


Могут отсутствовать: есть много дев и тест серверов и на каждом из них могут быть отресторены разные базы с прода.
Спасибо за sp_msforeachdb, но если я понял процедура выполняет один и тот же запрос в каждой базе, а у меня на каждую базу отдельный запрос.


Так почему вас смущает go между строк скрипта и ошибки о несуществующем объекте?
7 июл 15, 12:27    [17861627]     Ответить | Цитировать Сообщить модератору
 Re: Отключить проверку существования базы данных.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Meriguan
а у меня на каждую базу отдельный запрос.

Вы в одном файле собрали кучу разных действий в разными базах и хотите, чтобы сервер при компиляции никак не реагировал на отсутствующие на текущем сервере объекты ?
7 июл 15, 12:27    [17861629]     Ответить | Цитировать Сообщить модератору
 Re: Отключить проверку существования базы данных.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9162
Meriguan, напишите внешнее приложение для обслуживания сервера с динамическим набором баз.
7 июл 15, 12:29    [17861650]     Ответить | Цитировать Сообщить модератору
 Re: Отключить проверку существования базы данных.  [new]
Meriguan
Member

Откуда:
Сообщений: 124
0-0
Meriguan
пропущено...


Могут отсутствовать: есть много дев и тест серверов и на каждом из них могут быть отресторены разные базы с прода.
Спасибо за sp_msforeachdb, но если я понял процедура выполняет один и тот же запрос в каждой базе, а у меня на каждую базу отдельный запрос.


Так почему вас смущает go между строк скрипта и ошибки о несуществующем объекте?


Да, спасибо GO, в этом плане хорошо подходит, еще бы убрать сообщения об ошибке, что какой-то базы нет...
7 июл 15, 12:30    [17861655]     Ответить | Цитировать Сообщить модератору
 Re: Отключить проверку существования базы данных.  [new]
Meriguan
Member

Откуда:
Сообщений: 124
Glory
Meriguan
а у меня на каждую базу отдельный запрос.

Вы в одном файле собрали кучу разных действий в разными базах и хотите, чтобы сервер при компиляции никак не реагировал на отсутствующие на текущем сервере объекты ?


Да.
7 июл 15, 12:31    [17861668]     Ответить | Цитировать Сообщить модератору
 Re: Отключить проверку существования базы данных.  [new]
o-o
Guest
Meriguan
еще бы убрать сообщения об ошибке, что какой-то базы нет...

обращайтесь к объектам в виде db.sch.obj:
IF EXISTS (
SELECT 1
FROM sys.databases
WHERE name = 'DatabaseName_1'
)
BEGIN
	select *
	from DatabaseName_1.dbo.t1;
END

IF EXISTS (
SELECT 1
FROM sys.databases
WHERE name = 'DatabaseName_2'
)
BEGIN
	select *
	from DatabaseName_2.dbo.t2;
END


IF EXISTS (
SELECT 1
FROM sys.databases
WHERE name = 'master'
)
BEGIN
	select *
	from master.sys.database_principals;
END
7 июл 15, 13:37    [17862251]     Ответить | Цитировать Сообщить модератору
 Re: Отключить проверку существования базы данных.  [new]
Meriguan
Member

Откуда:
Сообщений: 124
o-o
Meriguan
еще бы убрать сообщения об ошибке, что какой-то базы нет...

обращайтесь к объектам в виде db.sch.obj:
IF EXISTS (
SELECT 1
FROM sys.databases
WHERE name = 'DatabaseName_1'
)
BEGIN
	select *
	from DatabaseName_1.dbo.t1;
END

IF EXISTS (
SELECT 1
FROM sys.databases
WHERE name = 'DatabaseName_2'
)
BEGIN
	select *
	from DatabaseName_2.dbo.t2;
END


IF EXISTS (
SELECT 1
FROM sys.databases
WHERE name = 'master'
)
BEGIN
	select *
	from master.sys.database_principals;
END


Точно!!! Большое спасибо!!!
7 июл 15, 14:50    [17862817]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить