1.是否存在
if exists(select 1 from master..sysdatabases where name='dbname')
print '存在'
2.不可以吧,如果存在只能先删除数据库
drop database dbname
go
if exists(select 1 from master..sysdatabases where name='dbname')
print '存在'
2.不可以吧,如果存在只能先删除数据库
drop database dbname
go
IF EXISTS (SELECT *
FROM master..sysdatabases
WHERE name = N'<database_name, sysname, test_db>')
DROP DATABASE <database_name, sysname, test_db>
GOCREATE DATABASE <database_name, sysname, test_db>
GO
CREATE PROCEDURE dbname
@name varchar(50) as
if (
select count(*) as co
from master.dbo.sysdatabases where name=@name
)=1
select 'SQL中存在'+@name+'数据库'
else
select 'SQL中不存在'+@name+'数据库'
如果存在就无条件复盖原来同名数据库:
可以用还原语句!
drop database dbname
create database dbname
go
print '无该数据库存在'
else
print '有该数据库存在'
--2、如何无条件复盖原来同名数据库?--写清楚你做什么操作需要覆盖? 是还原数据库,还是附加数据库,还是新建数据库
restore database 库名 from disk='x:\备份文件名' with replace对于新建/附加数据库需要的覆盖,只能先做判断,如果该库已经存在,则删除它,再做操作.
对于无条件覆盖还在注意一点,因为楼主是要无条件覆盖,所以,即使数据库有人在用,也要能强制断开它,达到无条件覆盖的目的,因此还要考虑强制断开用户连接的处理,下面的存储过程可以实现这个目的:
/*
断开所有用户打开的连接
*/
use master
goif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_killspid]
GOcreate proc p_killspid
@dbname sysname --要关闭进程的数据库名
as
declare @s nvarchar(1000)
declare tb cursor for local
select s='kill '+cast(spid as varchar)
from master..sysprocesses
where dbid=db_id(@dbname)open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
go--用法
exec p_killspid '客户资料'