В чем разница между этими двумя методами для удаления базы данных? - PullRequest
1 голос
/ 12 февраля 2011

Я всегда использую следующий код для удаления базы данных в SQL Server.

IF DB_ID('mydatabase') IS NOT NULL
    DROP DATABASE mydatabase;

Но в видео MCM Paul S Randal я видел такой код:

IF DATABASEPROPERTYEX ('mydatabase', 'Version') > 0
    DROP DATABASE mydatabase;

Какая разница?Второй способ быстрее первого?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 12 февраля 2011

Нет существенной разницы.Я даже дам вам другой вариант:

IF EXISTS(
    select *
    from master.sys.databases
    where name = 'mydatabase')
DROP DATABASE mydatabase;

Всегда есть много способов сделать то же самое.Но, исходя из личного опыта, DB_ID является одновременно самой короткой и, возможно, самой быстрой записью.

Различные способы доступа к информации о базах данных

3 голосов
/ 12 февраля 2011

По сути, нет никакой разницы. Оператор IF предназначен только для того, чтобы вы не получили сообщение об ошибке при вызове команды DROP DATABASE (т. Е. Это проверка на существование).

А с таким дорогостоящим действием, как DROP DATABASE, различия в миллисекундах, наследуемые в соответствующих проверках существования, несколько ... не имеют значения ..

Теперь, если вы искали информацию о базе данных, то DATABASEPROPERTYEX - очень полезный инструмент.

1 голос
/ 12 февраля 2011

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

Если вы хотите удалить только открытую базу данных, используйте DATABASEPROPERTYEX. Номер версии закрытой базы данных равен нулю. Удаление закрытой базы данных или базы данных с автономными файлами не приведет к удалению файлов с диска.

Кроме этого, производительность не является проблемой.

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