如何在sql脚本中指定“closures现有连接”
我在SQL Server 2008中的架构上进行了积极的开发,并且经常要重新运行我的drop / create数据库脚本。 当我跑步
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.
如果右键单击对象浏览器窗格中的数据库并从上下文菜单中select删除任务,则会出现一个checkbox,用于“closures现有连接”
有没有办法在我的脚本中指定这个选项?
您可以断开所有人的连接并回滚他们的交易:
alter database [MyDatbase] set single_user with rollback immediate
之后,你可以安全地删除数据库:)
去pipe理工作室,并做你所描述的一切,而不是点击确定,点击脚本。 它将显示它将运行的代码,然后将其合并到脚本中。
在这种情况下,你想要:
ALTER DATABASE [MyDatabase] SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO
根据ALTER DATABASE SET文档,在将数据库设置为SINGLE_USER模式后,仍然有可能无法访问该数据库:
在将数据库设置为SINGLE_USER之前,请确认AUTO_UPDATE_STATISTICS_ASYNC选项已设置为OFF。 设置为ON时,用于更新统计信息的后台线程将与数据库build立连接,并且将无法以单用户模式访问数据库。
因此,使用现有连接删除数据库的完整脚本可能如下所示:
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]
我尝试了SQL Server 2012上的什么说法。
pipe理创造给我:
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
- 当我尝试使用sp_executesql时,为什么会得到“Procedure expectpects parameter”@statement“types为”ntext / nchar / nvarchar“。
- SQL Server:无效的列名称
- 为什么我不能在SQL Management Studio的开始/结束块中使用“创build模式”?
- 在JDBC中处理DATETIME的值0000-00-00 00:00:00
- T-SQL转换与转换
- T-SQL中的'NOT'布尔值不能处理'bit'数据types?
- 什么是存储过程?
- MySQL如何填补范围内缺less的date?
- 计算Oracle中两个时间戳之差(以毫秒为单位)