SQL SERVER 2005 USE оператор - PullRequest
4 голосов
/ 12 июня 2011

Как лучше всего справиться, если USE {invalid_database_name} не удалось? Я хотел бы игнорировать остальные заявления в таких случаях. Это сделано для того, чтобы избежать случайного запуска скрипта на неверной базе данных. Спасибо за ваше предложение !!!

Ответы [ 4 ]

3 голосов
/ 12 июня 2011

Запустите скрипт в режиме SQLCMD в SSMS и используйте :on error exit. Если вы запускаете сценарий из приложения, используйте библиотеку, совместимую с режимом sqlcmd, например dbutilsqlcmd .

Редактировать

Чего не хватает во многих ответах, рекомендующих различные формы IF и RETURN и sp_executesql, так это в том, что они решают только проблему не выполнения пакета (последовательность, ограниченная GO ). Это мало помогает, когда речь идет о скрипте . Пакет, который проверяет существование БД, пропустит операторы, хорошо, но следующий пакет в сценарии будет продолжен и будет делать то, что он делает (например, создавать таблицы) в текущей базе данных, а не в требуемой базе данных. Добавление проверки в начале каждой партии является утомительным и подверженным ошибкам, размещение всего сценария в одной партии часто невозможно. Лучшее решение - просто сделать USE <inexisting name> и положиться на :on error exit, чтобы прервать выполнение скрипта при первой ошибке.

2 голосов
/ 12 июня 2011

вам нужно проверить, существует ли база данных с именем по

IF EXISTS (SELECT 1 FROM master.dbo.sysdatabases 
           WHERE ('[' + name + ']' = @dbname OR name = @dbname))
BEGIN
     --Your Code here
     [USE myDatabase]
END
1 голос
/ 12 июня 2011

Чтобы проверить, существует ли база данных:

IF DB_ID("<your database>" IS NOT NULL
BEGIN
    // Your code here
END

или это хранимая процедура:

IF DB_ID("<your database>" IS NULL
BEGIN
    RETURN
END

Это лучше, чем поиск в sysobjects.

0 голосов
/ 12 июня 2011

Попробуйте использовать

begin try
declare @use nvarchar(50)
set @use= 'use MyDB'
exec sp_executesql @use

select top 1 * from MyDB.dbo.TableA


end try
begin catch
print @@ERROR   --Error Number of Database not Found
print Error_message() -- Proper Message
end catch
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...