Dynamické SQL takto nefunguje.
Stále nemůžete předat parametry dynamickému řetězci, který bude použit místo názvů objektů.
Řetězec dotazu si musíte vytvořit sami a ručně nahradit @DBName
se skutečnou hodnotou. Můžete však použít parametr na pravé straně rovnice bez uvozovek.
Při vkládání názvu objektu do dotazu také vždy použijte QUOTENAME
funkce. Správně unikne názvu, takže nedochází k vkládání SQL nebo nežádoucímu chování způsobenému určitými znaky v názvu objektu.
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';