Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Guida alla sintassi di Sql Server 2008 sp_executesql - Penso che le mie virgolette non siano corrette

L'SQL dinamico non funziona in questo modo.
Non è ancora possibile passare parametri a una stringa dinamica che verrà utilizzata al posto dei nomi degli oggetti.

Devi costruire tu stesso la stringa di query, sostituendo manualmente @DBName con valore reale. Tuttavia, puoi utilizzare un parametro sul lato destro di un'equazione, senza virgolette.

Inoltre, quando inserisci il nome di un oggetto in una query, usa sempre QUOTENAME funzione. Escluderà correttamente il nome in modo che non ci siano sql injection o comportamenti indesiderati causati da determinati caratteri nel nome di un oggetto.

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';