Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Sql Server 2008 sp_executesql Syntaxhilfe - Ich denke, meine Anführungszeichen sind nicht korrekt

Dynamisches SQL funktioniert so nicht.
Sie können immer noch keine Parameter an eine dynamische Zeichenfolge übergeben, die anstelle von Objektnamen verwendet wird.

Sie müssen die Abfragezeichenfolge selbst erstellen und @DBName manuell ersetzen mit tatsächlichem Wert. Sie können jedoch einen Parameter auf der rechten Seite einer Gleichung ohne Anführungszeichen verwenden.

Wenn Sie einen Objektnamen in eine Abfrage einfügen, verwenden Sie außerdem immer den QUOTENAME Funktion. Der Name wird korrekt maskiert, sodass keine SQL-Einschleusung oder unerwünschtes Verhalten durch bestimmte Zeichen im Namen eines Objekts verursacht wird.

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