在Sql Server 2005中,怎么使用sql语句分离系统数据库以外的数据库

在Sql Server 2005中,如何使用sql语句分离系统数据库以外的数据库?
如题,跪求解。
最近公司在做数据库迁移工作,有一台服务器上的有很多的数据库都需要迁移,我想写成sql脚本批量先去分离,如下: 
EXEC sp_msforeachdb N' 
IF N''?'' IN(N''master'', N''model'', N''msdb'', N''tempdb'')
return
ALTER DATABASE [?] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
EXEC master.dbo.sp_detach_db @dbname = N''?'', @keepfulltextindexfile=N''true''
'
虽说可以分离,但总是提示:
消息 5058,级别 16,状态 5,第 4 行
在数据库 'master' 中无法设置选项 'SINGLE_USER'。
消息 5058,级别 16,状态 4,第 4 行
在数据库 'tempdb' 中无法设置选项 'SINGLE_USER'。
这是为什么?

------解决方案--------------------
--sql 2005

use master

declare @dbname as varchar(50)
while exists(select 1 from sys.databases where name not in ('master' ...那几个系统库和示例库,自己写完))
begin
  set @dbname = (select top 1 name from sys.databases where name not in ('master' ...那几个系统库和示例库,自己写完))
  exec master.dbo.sp_detach_db @dbname, 'false'  
end