#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 в зависимости от вашего запроса.