Mam procedurę długo przechowywane, która rozpoczyna się z następującym stwierdzeniem:SQL tworzyć bazy danych, jeśli nie istnieje, nieoczekiwane zachowanie
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = N'DBNAME')
BEGIN
CREATE DATABASE [DBNAME]
END;
oczekuje się, aby utworzyć DB na moim lokalnym serwerze, jeśli nie istnieje. Problem polega na tym, że prawie cały czas przechodzi tę część procedury przechowywanej i jej nie tworzy, co następnie koliduje z innym kodem z tej samej procedury. Z drugiej strony, w bardzo rzadkich przypadkach tworzy DB. Moje pytanie brzmi: Czy istnieje lepszy sposób, aby sprawdzić, czy istnieje DB, bo ja już próbowałem przynajmniej 10.
Inne sposoby ja próbowałem:
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;
Ale jeśli uruchomić go poza moją sp działa to doskonale, co powoduje, że myślę, że może to być problem związany z uprawnieniami.
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = N'DBNAME ') pracuje już w 2014 roku i wykazujących prawidłowy wynik. Czy otrzymujesz błąd? – Dhwani
czy użyłeś jakiegokolwiek wycofania jako części proc proc .. jeśli tak to sprawdź, czy nie zostanie wycofany .. –
Nie, po prostu dostaję DBNAME bazy danych, nie istnieje, kiedy próbuję użyć go w procedurze przechowywanej po tym. Nie używam transakcji. – StefanL19