Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Aide sur la syntaxe Sql Server 2008 sp_executesql - Je pense que mes guillemets ne sont pas corrects

Le SQL dynamique ne fonctionne pas comme ça.
Vous ne pouvez toujours pas passer de paramètres à une chaîne dynamique qui sera utilisée à la place des noms d'objets.

Vous devez construire vous-même la chaîne de requête, en remplaçant manuellement @DBName avec la valeur réelle. Cependant, vous pouvez utiliser un paramètre sur le côté droit d'une équation, sans guillemets.

De même, lorsque vous insérez un nom d'objet dans une requête, utilisez toujours le QUOTENAME fonction. Il échappera correctement le nom afin qu'il n'y ait pas d'injection sql ou de comportement indésirable causé par certains caractères dans le nom d'un objet.

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