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

#sql #sql-server #stored-procedures

Вопрос:

В настоящее время я пишу хранимую процедуру, которая выполняет несколько действий, но я хочу реализовать изменение в начале, которое приведет к тому, что USP не продолжит работу дальше, если результат переменной, предоставляющий имя базы данных, не существует.

Ниже приведен мой текущий код, который используется.

В принципе, если @DBName не существует на сервере, я хочу, чтобы хранимая процедура не продолжалась дальше, но если она существует, я хочу продолжить.

 DECLARE @FullyQualifiedTableName VARCHAR(100) = '[Sandbox].[Test].[USP_Test]';
DECLARE @DBName NVARCHAR(50) =
        (
            SELECT LEFT(@FullyQualifiedTableName, CHARINDEX('.', @FullyQualifiedTableName) - 1)

   );
 

Спасибо!

Ответ №1:

Один из способов-запросить словарь.

 ...
IF NOT EXISTS (SELECT *
                      FROM sys.databases
                      WHERE name = @dbname)
BEGIN
  -- whatever you want to do if the database doesn't exist
END;
...
 

Комментарии:

1. Альтернативно, IF DB_ID(@dbname) IS NULL

Ответ №2:

 DECLARE @FullyQualifiedTableName VARCHAR(100) = '[Sandbox].[Test].[USP_Test]';
DECLARE @DBName NVARCHAR(50) = (SELECT LEFT(@FullyQualifiedTableName, CHARINDEX('.', @FullyQualifiedTableName) - 1));

IF EXISTS (SELECT TOP 1 1 FROM @DBName)
BEGIN
  -- Your logic if DB Name Exists
END;

IF NOT EXISTS (SELECT TOP 1 1 FROM @DBName)
BEGIN
  -- Your logic if DB Name Not Exists
END;
 

SELECT TOP 1 1 FROM [SomeTable] Здесь этот запрос вернет любую 1 соответствующую запись, которая будет соответствовать критериям.

IF EXISTS и IF NOT EXISTS в основном используются для проверки условий. Он всегда будет возвращать значение true или false в зависимости от вашего запроса.