1.是否存在
if exists(select 1 from master..sysdatabases where name='dbname') 
   print '存在'
2.不可以吧,如果存在只能先删除数据库
  drop database dbname 
  go

解决方案 »

  1.   

    -- =============================================
    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
      

  2.   


    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+'数据库'
    如果存在就无条件复盖原来同名数据库:
    可以用还原语句!
      

  3.   

    if exists(select 1 from master..sysdatabases where name='dbname') 
       drop database dbname
       create database dbname
    go
      

  4.   

    --1、如何知道SQL否已存在某一个数据库名?if db_id('要检查的库名') is null
    print '无该数据库存在'
    else
    print '有该数据库存在'
    --2、如何无条件复盖原来同名数据库?--写清楚你做什么操作需要覆盖? 是还原数据库,还是附加数据库,还是新建数据库
      

  5.   

    对于还原数据库的时候实现覆盖已经存在的数据库,可以加 replace 选项,即:
    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  '客户资料'