sql >> Base de Datos >  >> RDS >> Sqlserver

Sql Server 2008 sp_executesql ayuda de sintaxis:creo que mis comillas no son correctas

SQL dinámico no funciona así.
Todavía no puede pasar parámetros a una cadena dinámica que se usará en lugar de nombres de objetos.

Debe construir la cadena de consulta usted mismo, reemplazando manualmente @DBName con valor real. Sin embargo, puede usar un parámetro en el lado derecho de una ecuación, sin comillas.

Además, al poner un nombre de objeto en una consulta, utilice siempre el QUOTENAME función. Escapará correctamente del nombre para que no haya inyección de sql o comportamiento no deseado causado por ciertos caracteres en el nombre de un objeto.

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