SQL động không hoạt động như vậy.
Bạn vẫn không thể chuyển các tham số cho một chuỗi động sẽ được sử dụng thay cho tên đối tượng.
Bạn phải tự tạo chuỗi truy vấn, thay thế thủ công @DBName
với giá trị thực tế. Tuy nhiên, bạn có thể sử dụng một tham số ở phía bên phải của phương trình mà không cần bất kỳ dấu ngoặc kép nào.
Ngoài ra, khi đặt tên đối tượng vào truy vấn, hãy luôn sử dụng QUOTENAME
hàm số. Nó sẽ thoát khỏi tên một cách chính xác để không có hành vi chèn sql hoặc hành vi không mong muốn do các ký tự nhất định trong tên của đối tượng gây ra.
SET @sql = N' IF EXISTS (SELECT NAME FROM master.sys.databases sd where name = @DBName)
BEGIN
ALTER DATABASE ' + quotename(@DBName, '[') + N' SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE ' + quotename(@DBName, '[') + N' SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE ' + quotename(@DBName, '[') + N'
END';