Tôi có một thủ tục lưu trữ lâu mà bắt đầu với tuyên bố sau:SQL tạo cơ sở dữ liệu nếu không tồn tại, hành vi bất ngờ
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = N'DBNAME')
BEGIN
CREATE DATABASE [DBNAME]
END;
Nó được kỳ vọng sẽ tạo DB trên máy chủ địa phương của tôi, nếu nó không tồn tại. Vấn đề là hầu như tất cả thời gian nó đi thorugh phần này của thủ tục lưu trữ và không tạo ra nó, mà sau đó can thiệp với các mã khác từ các thủ tục tương tự. Mặt khác, trong trường hợp rất hiếm, nó tạo ra DB. Câu hỏi của tôi là: Có cách nào tốt hơn để kiểm tra nếu DB tồn tại, bởi vì tôi đã cố gắng ít nhất 10
cách khác tôi đã cố gắng:
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;
Nhưng nếu tôi chạy nó bên ngoài của sp của tôi , nó hoạt động hoàn hảo, khiến tôi nghĩ rằng nó có thể là một số vấn đề liên quan đến quyền.
NẾU NOT EXISTS (SELECT * FROM sys.databases WHERE name = N'DBNAME ') đã được làm việc trong năm 2014 và hiển thị kết quả chính xác. Bạn nhận được bất kỳ lỗi nào? – Dhwani
bạn đã sử dụng bất kỳ cuộn trở lại như là một phần của ur proc ..if có sau đó kiểm tra xem nó không được cuộn lại .. –
Không, tôi chỉ nhận được Database 'DBNAME' không tồn tại, khi tôi cố gắng sử dụng nó trong thủ tục lưu sẵn sau đó. Tôi không sử dụng giao dịch. – StefanL19