sql清除資料庫的連線(for sqlserver2000)
大家都會碰到這樣的問題,在SQL Server2000中經常要分離資料庫,但是在分離前資料庫還處於連線狀態,這時要斷開這個
連線,這時我們會想到用企業管理器去實現,但是現在我們想通過外部程式區執行它,咋辦呢,只要找到相應的SQL語句就OK
了,在此我為大家提供一個儲存過程來實現這個目的,在master資料庫下建立以下這麼個儲存過程,該儲存過程還有一個輸入
引數(要斷開連線的資料庫),該儲存過程過程具有返回值以及異常捕獲,具體在儲存過程中都有說明。如果想呼叫這個返回值
請參考我寫的文章--SQL SERVER儲存過程的返回值(總結)。
如果大家有更好的方法請告訴我,或者改進我的方法,我的聯絡方法是:QQ:870292445
-------------------------------------------------------------------------------------------------------------
--該儲存過程主要是中斷資料庫的連線,有4個返回值:-2表示資料庫為空或者不存在;-1表示不能刪除系統資料庫的程式;0表示中斷成功;1表示中斷失敗
create procedure sp_kill_processes(@dbname varchar(100))
as
begin
--資料庫如果為空或者不存在,返回-2
declare @errMsg nvarchar(255)
declare @count int
set @dbname = ltrim(rtrim(@dbname))
set @count = (select count(name) from sysdatabases where name = @dbname)
if(@count <= 0)
begin
set @errMsg = 'database ' + @dbname + ' is not exist'
raiserror(@errMsg,16,1)
return -2
end
--資料庫如果是系統資料庫則返回-1
if(@dbname = 'master' or @dbname = 'tempdb' or @dbname = 'model' or @dbname = 'msdb' or @dbname = 'pubs' or @dbname = 'Northwind')
begin
set @errMsg = @dbname + ' is a sysdatabase,its processes is allowed not to kill'
raiserror(@errMsg,16,1)
return -1
end
--資料庫如果沒有使用的執行緒則也表示成功,返回0
set @count = (select count(spid) from sysprocesses where dbid = db_id(@dbname))
if(@count <= 0)
return 0
--建立遊標,中斷程式
declare @pro_kill nvarchar(255)
declare tasklist_cursor cursor for select 'kill ' + convert(varchar(5),spid) + ' -- ' + p.loginame from sysprocesses p,sysdatabases d where p.dbid = d.dbid and d.name = @dbname
open tasklist_cursor
fetch next from tasklist_cursor into @pro_kill
while(@@fetch_status = 0)
begin
exec(@pro_kill)
if(@@error <> 0)
begin
set @errMsg = 'it meets error when close the link of database ' + @dbname
raiserror(@errMsg,16,1)
return 1
end
fetch next from tasklist_cursor into @pro_kill
end
close tasklist_cursor
deallocate tasklist_cursor
return 0
end
連線,這時我們會想到用企業管理器去實現,但是現在我們想通過外部程式區執行它,咋辦呢,只要找到相應的SQL語句就OK
了,在此我為大家提供一個儲存過程來實現這個目的,在master資料庫下建立以下這麼個儲存過程,該儲存過程還有一個輸入
引數(要斷開連線的資料庫),該儲存過程過程具有返回值以及異常捕獲,具體在儲存過程中都有說明。如果想呼叫這個返回值
請參考我寫的文章--SQL SERVER儲存過程的返回值(總結)。
如果大家有更好的方法請告訴我,或者改進我的方法,我的聯絡方法是:QQ:870292445
-------------------------------------------------------------------------------------------------------------
--該儲存過程主要是中斷資料庫的連線,有4個返回值:-2表示資料庫為空或者不存在;-1表示不能刪除系統資料庫的程式;0表示中斷成功;1表示中斷失敗
create procedure sp_kill_processes(@dbname varchar(100))
as
begin
--資料庫如果為空或者不存在,返回-2
declare @errMsg nvarchar(255)
declare @count int
set @dbname = ltrim(rtrim(@dbname))
set @count = (select count(name) from sysdatabases where name = @dbname)
if(@count <= 0)
begin
set @errMsg = 'database ' + @dbname + ' is not exist'
raiserror(@errMsg,16,1)
return -2
end
--資料庫如果是系統資料庫則返回-1
if(@dbname = 'master' or @dbname = 'tempdb' or @dbname = 'model' or @dbname = 'msdb' or @dbname = 'pubs' or @dbname = 'Northwind')
begin
set @errMsg = @dbname + ' is a sysdatabase,its processes is allowed not to kill'
raiserror(@errMsg,16,1)
return -1
end
--資料庫如果沒有使用的執行緒則也表示成功,返回0
set @count = (select count(spid) from sysprocesses where dbid = db_id(@dbname))
if(@count <= 0)
return 0
--建立遊標,中斷程式
declare @pro_kill nvarchar(255)
declare tasklist_cursor cursor for select 'kill ' + convert(varchar(5),spid) + ' -- ' + p.loginame from sysprocesses p,sysdatabases d where p.dbid = d.dbid and d.name = @dbname
open tasklist_cursor
fetch next from tasklist_cursor into @pro_kill
while(@@fetch_status = 0)
begin
exec(@pro_kill)
if(@@error <> 0)
begin
set @errMsg = 'it meets error when close the link of database ' + @dbname
raiserror(@errMsg,16,1)
return 1
end
fetch next from tasklist_cursor into @pro_kill
end
close tasklist_cursor
deallocate tasklist_cursor
return 0
end
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-630639/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Golang 全域性sql資料庫連線GolangSQL資料庫
- c#連線SQL Server資料庫C#SQLServer資料庫
- 【資料庫資料恢復】sql server資料庫連線失效的資料恢復案例資料庫資料恢復SQLServer
- [資料庫][SQL]圖解各種連線join資料庫SQL圖解
- 1.3.3. 通過SQL*Plus 連線資料庫SQL資料庫
- PL/SQL Developer連線遠端Oracle資料庫SQLDeveloperOracle資料庫
- java 資料庫程式設計(一)JDBC連線Sql Server資料庫Java資料庫程式設計JDBCSQLServer
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- 使用SQL4Automation讓CodeSYS連線資料庫SQL資料庫
- go 連線資料庫 - GORM學習 - sql查詢Go資料庫ORMSQL
- CDA資料分析師 - SQL資料庫基礎 查詢&連線SQL資料庫
- 1.3.3.1. 關於連線資料庫的SQL*Plus 工具描述資料庫SQL
- 解決無法連線SQL Server資料庫的方法BWSQLServer資料庫
- 連線資料庫資料庫
- 資料庫的連線數資料庫
- Python連線三大資料庫MS Sql Server、Oracle、MySQLPython大資料資料庫ServerOracleMySql
- Jtti:連線不上SQL資料庫怎麼解決?JttiSQL資料庫
- 第 67 期 Go database/sql 資料庫連線池分析GoDatabaseSQL資料庫
- 本地不安裝oracle,用PL/SQL Developer連線資料庫OracleSQLDeveloper資料庫
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- mysqli連線資料庫MySql資料庫
- Mongodb資料庫連線MongoDB資料庫
- Android 連線資料庫Android資料庫
- java連線資料庫Java資料庫
- 連線資料庫-mysql資料庫MySql
- jmeter連線資料庫JMeter資料庫
- Mybatis連線資料庫MyBatis資料庫
- JSP連線資料庫JS資料庫
- JDBC連線資料庫JDBC資料庫
- Flask連線資料庫Flask資料庫
- 資料庫與python的連線資料庫Python
- 資料庫的連線過程資料庫
- sql server資料庫錯誤資料恢復(資料庫連線失效,無法附加查詢)SQLServer資料庫資料恢復
- 《四 資料庫連線池原始碼》手寫資料庫連線池資料庫原始碼
- dbForge Studio for SQL Server入門教程:如何連線到資料庫SQLServer資料庫
- 【MySQL】自定義資料庫連線池和開源資料庫連線池的使用MySql資料庫
- python 連線 mongo 資料庫連線超時PythonGo資料庫
- 織夢CMS(dedecms)的資料庫連線檔案_織夢連線資料庫檔案資料庫
- Java 資料庫連線的那些事Java資料庫