String str="use master " +
   "go "+
"if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) " +
"drop procedure [dbo].[p_killspid] " +
"go "+
"create proc p_killspid " 
"@dbname sysname " +
"as " +
"declare @s nvarchar(1000) " +
"declare tb cursor local for " +
"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 ";
总是出现如下错误:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: 'go' 附近有语法错误。

解决方案 »

  1.   

    "drop procedure [dbo].[p_killspid] " + 
    "go "+ 
    "create proc p_killspid "  
    "drop procedure [dbo].[p_killspid] go create proc p_killspid 
    这条语句拼的对吗,你好好看看..
      

  2.   

    这是Source Review级别的错误,你可以debug一下,把字符串考到查询分析器里看一下不就知道什么地方错了。
      

  3.   

    你把这个str结果,在分析器里检查看看!
      

  4.   

    恩,把生成的sql语句先看看,有没有问题
      

  5.   

    写sql语句能写这么长?建议处理sql语句是否正确,最好方法就是把你这个string打印出来看看,这样就能知道哪块少什么标点啊,或者拼写错误
      

  6.   

    这段能通过编译咩?
    第六行少了一个+号
    "create proc p_killspid "  
    "@dbname sysname " + 
    在Java里就被喀嚓了咩.
      

  7.   

    ....这么长还是用PreparedStatement吧....
      

  8.   

    另外,如果一定要用类似形式,可以使用StringBuffer方法
    StringBuffer sql = new StringBuffer();
    sql.append("use master ");
    sql.append("go ");
    sql.append("create proc p_killspid ");
    ...
    ...
    最后直接使用sql.toString();
    至少比+号直观.
      

  9.   

    我试过~~你的sql了~~ms不是问题
    应该~~是字符串~~
    ms拼接问题~~保证一行一行拼接~
    试下
      

  10.   

    我是一行一行拼接的
                                                                             "use master" +
      "go"+
      "if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)" +
      "drop procedure [dbo].[p_killspid] GO" +
      "create proc p_killspid" +
      "@dbname sysname" +
      "as  " +
      "declare @s nvarchar(1000)" +
      "declare tb cursor local for" +
      "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";
    总是说java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]未能在 sysdatabases 中找到数据库 'mastergoif' 所对应的条目。没有找到具有该名称的条目。请确保正确地输入了名称。
    我又在每个分号后加了个空格 又出现java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: 'go' 附近有语法错误。
      

  11.   

    我把查询分析器里的代码给大家,麻烦给拼接成java里的String
    use master
    go
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[p_killspid]
    GO
    create proc p_killspid
    @dbname sysname
    as  
    declare @s nvarchar(1000)
    declare tb cursor local for
    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  'Chaoshi'
    RESTORE  DATABASE  Chaoshi  FROM  disk='E:\毕业设计\CHAOSHI\444.mdf'
      

  12.   


    StringBuffer sql = new StringBuffer();
    sql.append("use master \n");
    sql.append("go \n");
    sql.append("if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) \n");
    sql.append("drop procedure [dbo].[p_killspid] \n");
    sql.append("GO \n");
    sql.append("create proc p_killspid \n");
    sql.append("@dbname sysname \n");
    sql.append("as   \n");
    sql.append("declare @s nvarchar(1000) \n");
    sql.append("declare tb cursor local for \n");
    sql.append("select s='kill '+cast(spid as varchar) \n");
    sql.append("from master..sysprocesses  \n");
    sql.append("where dbid=db_id(@dbname) \n");
    sql.append("open tb  \n");
    sql.append("fetch next from tb into @s \n");
    sql.append("while @@fetch_status=0 \n");
    sql.append("begin \n");
    sql.append("exec(@s) \n");
    sql.append("fetch next from tb into @s \n");
    sql.append("end \n");
    sql.append("close tb \n");
    sql.append("deallocate tb \n");
    sql.append("go \n");
    sql.append("exec p_killspid  'Chaoshi' \n");
    sql.append("RESTORE  DATABASE  Chaoshi  FROM  disk='E:\\毕业设计\\CHAOSHI\\444.mdf'\n");
      

  13.   

    还是说java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 2 行: 'go' 附近有语法错误。
      

  14.   

    我把带go的都删了
    又出现这样的问题:
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]'CREATE PROCEDURE' 必须是批查询中的第一条语句。
      

  15.   

    不要拼吧 写成function or procedure吧
      

  16.   

    解析sql语句的时候有问题,use 的语法你关注一下吧 , 是不是理解成了use master, use go ... 这样了
    猜测,很久不用MS Sql了手头也没有
      

  17.   

    请问在自己的程序里可以用上面的语句kill 自己的进程吗? 比如我正在程序里使用Chaoshi数据库,现在我想实现恢复的功能,可以用上面的语句恢复吗?
      

  18.   

    关掉自己的进程:if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[killspid]
    GOSET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GOcreate  proc  killspid  (@dbname  varchar(20))  
    as  
    begin  
    declare  @sql  nvarchar(500),@temp varchar(1000)
    declare  @spid  int  
    set  @sql='declare  getspid  cursor  for    
    select  spid  from  sysprocesses  where  dbid=db_id('''+@dbname+''')'  
    exec  (@sql)  
    open  getspid  
    fetch  next  from  getspid  into  @spid  
    while  @@fetch_status =0
    begin  
      set @temp='kill  '+rtrim(@spid)
      exec(@temp)
    fetch  next  from  getspid  into  @spid  
    end  
    close  getspid  
    deallocate  getspid  
    endGO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO
      

  19.   

    你先将生成的sql语句拿到数据库环境中看能不能执行,
    还有一点需要说明一下,你上面是用到了大量的字符串相加的动作,建议频繁操作字符串相加动作的话,使用StringBuffer,或者StringBuilder把最后的结果再toString就好,这样会效率很高
    祝你成功.....