在使用pymssql連接SQL Server時遇到這個問題:
pymssql.OperationalError: (3702, b'Cannot drop database "XXX" because it is currently in use.DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n')
程式:
cursor = conn.cursor()
conn.autocommit(True)
cursor.execute('CREATE DATABASE XXX ON (NAME=\'XXX_Data\', FILENAME=\'{}\\XXX.mdf\', SIZE=5 MB, MAXSIZE=50 MB, FILEGROWTH=5%) LOG ON (NAME=\'XXX_Log\',FILENAME=\'{}\\XXX_Log.ldf\',SIZE=1 MB,MAXSIZE=5 MB,FILEGROWTH=1 MB)'.format(dir, dir))
cursor.execute('USE XXX CREATE TABLE xxx ( xxxxxxx )')
cursor.execute('DROP TABLE xxx')
cursor.execute('USE XXX DROP DATABASE XXX')
操作database之前開啟了autocommit,之后發現如果在CREATE DATABASE和DROP DATABASE陳述句之間執行了其他對資料庫的操作,在DROP DATABASE時就會產生以上錯誤,
查閱了外網的資料,發現原因是洗掉資料庫時錯誤的使用了資料庫本身:“USE XXX”,為了成功洗掉,需要將USE改為“USE MASTER”:
cursor.execute('USE MASTER DROP DATABASE XXX')
之后成功洗掉,
網上的另一種方法是添加如下陳述句將資料庫回滾到初始狀態,實測對我并沒有影響,原因不明,
use master
go
alter database database_name set single_user with rollback immediate
SQL新手,歡迎大家批評指正 XD
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/240877.html
標籤:其他
