Динамический "USE SomeDB" если база отсутсвует

Yuri Abele
Дата: 19.01.2009 13:55:34
Хочу вставить в T-SQL скрипт что-то такое:

IF @SERVERNAME = 'Server1'
USE DB1
ELSE IF @SERVERNAME = 'Server2'
USE DB2

такое работает только если на сервере, где это исполняется присутсвуют обе базы данных. Если же сервер у меня 'Server1' и на нем нет базы DB2, то скрипт не выполнится, а ругнется, что не смог найти в sysdatabases базу DB2. Можно ли как-то такое обойти?

Ошибка причем происходит не во время выполнения, а во время валидации скрипта.
Вот если бы можно было как-то валидацию отключить (что-то подобное SET NOEXEC, только наоборот - SET NOVALIDATE)

Пихать весь огромный скрипт в строчки и вызывать их черех sp_executesql или EXEC('...') не пройдет, т.к. серипт постоянно и активно правится и разработчикам очень не понравится или видет все красным или каждый раз "вытаскивать" из строки и "засовывать" обратно.
Гавриленко Сергей Алексеевич
Дата: 19.01.2009 13:59:04
IF @SERVERNAME = 'Server1'
EXEС ('USE DB1; EXEC [Процедура в которой огромный скрипт]')
ELSE IF @SERVERNAME = 'Server2'
EXEС ('USE DB2; EXEC [Процедура в которой огромный скрипт]')
И вообще, если у вас 2005й, то переходите на синонимы и не надо будет извращаться.
Glory
Дата: 19.01.2009 14:03:23
Yuri Abele
Хочу вставить в T-SQL скрипт что-то такое:

IF @SERVERNAME = 'Server1'
USE DB1
ELSE IF @SERVERNAME = 'Server2'
USE DB2

такое работает только если на сервере, где это исполняется присутсвуют обе базы данных. Если же сервер у меня 'Server1' и на нем нет базы DB2, то скрипт не выполнится, а ругнется, что не смог найти в sysdatabases базу DB2. Можно ли как-то такое обойти?

А почему клиент не может сам позаботиться об установке нужной текущей базы коннекта ?
Yuri Abele
Дата: 19.01.2009 14:39:27
Гавриленко Сергей Алексеевич
IF @SERVERNAME = 'Server1'
EXEС ('USE DB1; EXEC [Процедура в которой огромный скрипт]')
ELSE IF @SERVERNAME = 'Server2'
EXEС ('USE DB2; EXEC [Процедура в которой огромный скрипт]')

Ине не надо вызывать процедуру, мне надо делать кучу изменений и добавлений в схеме базы (ALTER & CREATE таблиц, вьюх и процедур). Это deployment скрипт, который накатывает накопившиеся изменения для очередной версии продукта. При этом (кто такое придумал, того убивбы) у разработчиков база называется что-то подобное MyDb_dev, у тестеров MyDb_test, на продуктивном сервере MyDb_prod. Благо хоть машины разные.

Гавриленко Сергей Алексеевич
И вообще, если у вас 2005й, то переходите на синонимы и не надо будет извращаться.

Синонимы базы? А как задать базе синоним?
Yuri Abele
Дата: 19.01.2009 14:53:26
Glory
А почему клиент не может сам позаботиться об установке нужной текущей базы коннекта?

Потому что клиент-человек, а ему свойственны ошибки.
Glory
Дата: 19.01.2009 14:54:58
Yuri Abele
Glory
А почему клиент не может сам позаботиться об установке нужной текущей базы коннекта?

Потому что клиент-человек, а ему свойственны ошибки.

Не понял. У вас человек силой мысли устанавливает коннект с сервером и общается с ним напрямую в двоичном коде ?
Yuri Abele
Дата: 19.01.2009 15:01:56
Glory
Yuri Abele
Glory
А почему клиент не может сам позаботиться об установке нужной текущей базы коннекта?

Потому что клиент-человек, а ему свойственны ошибки.

Не понял. У вас человек силой мысли устанавливает коннект с сервером и общается с ним напрямую в двоичном коде ?

Прикалываемся?

Нет, у нас человек открывает скрипт в Management Studio и вызывает его на выполнение.
Сечас вы спросите: "И что, он не может руками переключиться в правильную базу?".
Glory
Дата: 19.01.2009 15:04:19
Yuri Abele
Glory
Yuri Abele
Glory
А почему клиент не может сам позаботиться об установке нужной текущей базы коннекта?

Потому что клиент-человек, а ему свойственны ошибки.

Не понял. У вас человек силой мысли устанавливает коннект с сервером и общается с ним напрямую в двоичном коде ?

Прикалываемся?

Нет, у нас человек открывает скрипт в Management Studio и вызывает его на выполнение.
Сечас вы спросите: "И что, он не может руками переключиться в правильную базу?".

Нет, я спрошу, почему обновления не запускаются пакетно ? С указанием нужной базы и ведением лога выполнения
Yuri Abele
Дата: 19.01.2009 15:22:19
Glory
Нет, я спрошу, почему обновления не запускаются пакетно ? С указанием нужной базы и ведением лога выполнения

Ну что я могу сказать - так сложилось, что на продуктивной системе админы хотят запускать этот скрипт руками.
Glory
Дата: 19.01.2009 15:24:39
Yuri Abele
Glory
Нет, я спрошу, почему обновления не запускаются пакетно ? С указанием нужной базы и ведением лога выполнения

Ну что я могу сказать - так сложилось, что на продуктивной системе админы хотят запускать этот скрипт руками.

И почему они руками не могут запустить пакет обновлений то ? Им важно визуально проконтролировать текст этих обновлений ?