У меня есть длинная хранимая процедура, которая начинается со следующего утверждения:
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = N'DBNAME')
BEGIN
CREATE DATABASE [DBNAME]
END;
Ожидается, что он создаст БД на моем локальном сервере, если он не существует. Проблема в том, что почти все это время происходит в этой части хранимой процедуры и не создает ее, что затем мешает другому коду из той же процедуры. С другой стороны, в очень редких случаях он создает БД. Мой вопрос: есть ли лучший способ проверить, существует ли БД, потому что я уже пробовал не менее 10.
Другие способы, которые я пробовал:
IF NOT EXISTS (SELECT 1 FROM sys.databases WHERE name = N'DBNAME')
BEGIN
CREATE DATABASE [DBNAME]
END;
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'DBNAME')
BEGIN
CREATE DATABASE [DBNAME]
END;
IF NOT EXISTS (SELECT name FROM master.dbo.sys.databases WHERE name = N'DBNAME')
BEGIN
CREATE DATABASE [DBNAME]
END;
Но если я запустил его вне моего sp, он отлично работает, что заставляет меня думать, что это может быть проблема, связанная с правами.