小弟我想通过ADOQuery创建新的SQL server数据库,在创建之前要先检验要创建的数据库是否存在,如果存在的话就先删除再创建。我用下面的语句完成,但是总是报错。
SQL.Clear;
SQL.Add('if exists(select * from sysdatabases where name='''+trim(edit1.text)+''') drop database '+trim(edit1.text));
ExecSql;报错说数据库正在使用,不能执行删除操作,小弟想请问应该怎么写才能接这个问题,谢谢。

解决方案 »

  1.   

    在你的SQL语句前加USE MASTER --其他数据库名
    试试
      

  2.   

    select * from sysdatabases where name=''' 不就是正在使用吗?
    你分开来写吧!先查询是否存在,然后关闭掉查询,数据库,再删除。
      

  3.   

    sql.clear;sql.add('use master');
    SQL.Add('if exists(select * from sysdatabases where name='''+trim(edit1.text)+''') drop database '+trim(edit1.text));
    execsql;
      

  4.   

    sql服务器的数据库没必要用程序来初始化把
      

  5.   

    我连接的时候已经指定了连接master了,但是查找存在之后还是不能删除呀
      

  6.   

    你把你的SQL语句取出来,放到查询分析器里面运行看看有没有问题
      

  7.   

    邹建的
    /*
    关闭用户打开的进程处理
    */
    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 varchar(200) --要关闭进程的数据库名
    as  
    declare @sql  nvarchar(500)  
    declare @spid nvarchar(20) declare #tb cursor for
    select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
    open #tb
    fetch next from #tb into @spid
    while @@fetch_status=0
    begin  
    exec('kill '+@spid)
    fetch next from #tb into @spid
    end  
    close #tb
    deallocate #tb
    go--用法  
    exec p_killspid  '数据库名'
    在删除