Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Ajuda da sintaxe do Sql Server 2008 sp_executesql - acho que minhas aspas não estão corretas


SQL dinâmico não funciona assim.
Você ainda não pode passar parâmetros para uma string dinâmica que será usada no lugar de nomes de objetos.

Você mesmo deve construir a string de consulta, substituindo manualmente @DBName com valor real. No entanto, você pode usar um parâmetro no lado direito de uma equação, sem aspas.

Além disso, ao colocar um nome de objeto em uma consulta, sempre use o QUOTENAME função. Ele escapará corretamente do nome para que não haja injeção de sql ou comportamento indesejado causado por determinados caracteres no nome de um 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';