Adamが提案したアプローチが機能しない理由は、アクティブな接続をループしている間に新しい接続を確立でき、それらを見逃してしまうためです。代わりに、この欠点のない次のアプローチを使用できます。
-- set your current connection to use master otherwise you might get an error
use master
ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
--do you stuff here
ALTER DATABASE YourDatabase SET MULTI_USER