如何在sql脚本中指定“关闭现有连接”
我在SQL Server 2008中的模式上进行了有效的开发,并且经常要重新运行我的drop/create数据库脚本。如果你正好在对象资源管理器窗格中的数据库上单击,然后从上下文菜单中删除任务,当我运行如何在sql脚本中指定“关闭现有连接”
USE [master]
GO
IF EXISTS (SELECT name FROM sys.databases WHERE name = N'MyDatabase')
DROP DATABASE [MyDatabase]
GO
我经常会收到这样的错误
Msg 3702, Level 16, State 4, Line 3
Cannot drop database "MyDatabase" because it is currently in use.
,有一个复选框,其中“关闭现有连接”
有没有方法在脚本中指定此选项?
可以断开每个人都和回滚他们的交易有:
alter database [MyDatbase] set single_user with rollback immediate
之后,您可以安全地删除数据库:)
转到管理工作室,做你所描述的一切,而不是只点击确定,点击脚本。它将显示它将运行的代码,然后将其纳入脚本中。
在这种情况下,你想:
ALTER DATABASE [MyDatabase] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
我是布莱恩g尝试通过完全描述你所描述的内容来回答这个问题(编写“删除数据库”对话框的脚本),但是如果你选中“关闭现有连接”复选框,**不会将ALTER DATABASE行添加到脚本中。 – 2009-11-10 23:03:16
从向导生成的脚本为我包括'alter database'行。 – nick 2009-11-10 23:56:21
奇怪。哪个Management Studio版本?我在2008年x64。 – 2009-11-11 00:25:48
按照ALTER DATABASE SET文件,还有一种可能性,即一个数据库设置为SINGLE_USER模式后,您将无法访问该数据库:
在将数据库设置为SINGLE_USER之前,请确认AUTO_UPDATE_STATISTICS_ASYNC选项已设置为OFF。设置为ON时,用于更新统计信息的后台线程将与数据库建立连接,并且您将无法以单用户模式访问数据库。
所以,一个完整的脚本,删除现有的连接数据库可能是这样的:
DECLARE @dbId int
DECLARE @isStatAsyncOn bit
DECLARE @jobId int
DECLARE @sqlString nvarchar(500)
SELECT @dbId = database_id,
@isStatAsyncOn = is_auto_update_stats_async_on
FROM sys.databases
WHERE name = 'db_name'
IF @isStatAsyncOn = 1
BEGIN
ALTER DATABASE [db_name] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
-- kill running jobs
DECLARE jobsCursor CURSOR FOR
SELECT job_id
FROM sys.dm_exec_background_job_queue
WHERE database_id = @dbId
OPEN jobsCursor
FETCH NEXT FROM jobsCursor INTO @jobId
WHILE @@FETCH_STATUS = 0
BEGIN
set @sqlString = 'KILL STATS JOB ' + STR(@jobId)
EXECUTE sp_executesql @sqlString
FETCH NEXT FROM jobsCursor INTO @jobId
END
CLOSE jobsCursor
DEALLOCATE jobsCursor
END
ALTER DATABASE [db_name] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE [db_name]
我tryed SQL Server上什么hgmnz SAIDS 2012
管理创建对我说:
EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'MyDataBase'
GO
USE [master]
GO
/****** Object: Database [MyDataBase] Script Date: 09/09/2014 15:58:46 ******/
DROP DATABASE [MyDataBase]
GO
我知道这太晚了,但可能是它帮助某人。使用这把你的数据库脱机
ALTER DATABASE dbname SET OFFLINE
我用这个,但如果有机会的其他用户能够得到“单用户”窗口经常在想 - 这可能吗?可能的替代方法是ALTER DATABASE [MyDatabaseName] SET OFFLINE WITH ROLLBACK IMMEDIATE – Kristen 2009-11-10 23:04:19
single_user中的用户是你;除非您在设置单用户模式后断开连接。然后一(1)个其他用户可以登录。 – Andomar 2009-11-10 23:08:32
谢谢;说得通。 – Kristen 2009-11-10 23:19:51