Cuando existen conexiones a una base y tratas de desatacarla, la operación falla.
Basándonos en las buenas practicas, deberíamos identificarlas y hablar con los usuarios para que se desconecten amistosamente, pero esto no siempre es posible y debemos matar conexión por conexión.
Un modo mas eficiente de hacerlo es pasar la base a modo monousuario (SINGLE_USER).
El modo SINGLE_USER indica que solo un usuario puede ingresar a la base, mientras que al combinarlo con ROLLBACK IMMEDIATE cancela las transacciones y rollbacks existentes.
Ahora si, el script:
USE [master] GO ALTER DATABASE [database_name] SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO USE [master] GO EXEC master.dbo.sp_detach_db @dbname = N'database_name' GO