首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 数据库恢复气氛问题 [已结贴,结贴人:bbjjqq]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 21:55:12 楼主
    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:\111.mdf'
    这是恢复数据库的sql语句 在查询分析器里可以回复数据库
    可是在程序里老是出现如下错误:
    sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]未能在 sysdatabases 中找到数据库 'mastergoif' 所对应的条目。没有找到具有该名称的条目。请确保正确地输入了名称。
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 21:59:131楼 得分:0
    第一个问题:select s='kill '+cast(spid as varchar)  这里面的s漏掉了@。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:03:092楼 得分:5
    第二个问题是:你上述语句是在存储过程中,还是在查询分析器里面执行的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:03:103楼 得分:5
    看看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:03:334楼 得分:5
    *mastergoif*
    这个是哪里来的?
    没有见到啦?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:06:205楼 得分:0
    我在查询分析器里执行就可以回复数据库
    可是在程序里运行此sql语句就出现上述错误
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:07:406楼 得分:5
    关注
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    发表于:2008-05-08 22:08:057楼 得分:5
    未能在 sysdatabases 中找到数据库 'mastergoif' 所对应的条目。没有找到具有该名称的条目。请确保正确地输入了名称。
    ----

    检查名称是否正确,以及disk='E:\111.mdf' ,把数据库文件放磁盘根目录下不是个好习惯.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:09:598楼 得分:0
    mastergoif

    master
    go
    if

    ?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:11:179楼 得分:0
    名称肯定正确,在查询分析器里就可以运行
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    发表于:2008-05-08 22:14:0310楼 得分:5
    引用 9 楼 bbjjqq 的回复:
    名称肯定正确,在查询分析器里就可以运行


    一楼兄台的:
    第一个问题:select s='kill '+cast(spid as varchar)  这里面的s漏掉了@。

    这句你看了吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:15:3411楼 得分:5
    ?
    SQL code
    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 begin 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 end go exec p_killspid 'Chaoshi'
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:16:4112楼 得分:5
    只调用存储过程就行了
    加go为批处理
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:17:5213楼 得分:0
    在查询分析器里加上@后就会出现错误,恢复不了!不加是正确的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:39:2314楼 得分:5
    1、不要加@
    2、应该是你的程序问题吧

        你的程序只要调用,
          exec p_killspid  'Chaoshi'
          RESTORE  DATABASE  Chaoshi  FROM  disk='E:\111.mdf'
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:43:3215楼 得分:5
    估计是引号的问题吧
    在查询分析器是直接执行,拿到程序中还得对代码再加引号,是否是引号的问题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:44:4116楼 得分:0
    引用 10 楼 dawugui 的回复:
    引用 9 楼 bbjjqq 的回复:
    名称肯定正确,在查询分析器里就可以运行


    一楼兄台的:
    第一个问题:select s='kill '+cast(spid as varchar)  这里面的s漏掉了@。

    这句你看了吗?


    人家这里是定义游标,又不是给变量赋值
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:52:1817楼 得分:5
    引用 1 楼 gaojier1000 的回复:
    第一个问题:select s='kill '+cast(spid as varchar)  这里面的s漏掉了@。


    这句不少@

    估计是被上面的 declare @s 给误导了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:54:4318楼 得分:0
    你用的什么程序调用的这个批处理

    语句没有问题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 22:59:0219楼 得分:5


    是不是在执行的时候

    use master
    go
    if
    连到一起变成 use mastergoif 了

    你检测一下程序吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 07:39:0920楼 得分:0
    好像是我的字符串有问题我是在java里定义了一个字符串:
    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";
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 07:42:1921楼 得分:0
    然后我又在每个分号后面加了个空格又出现如下错误:
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: 'go' 附近有语法错误。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • utpcb
    • 等级:
    发表于:2008-05-09 10:09:0722楼 得分:5
    你把全部写成存储过程 然后参数传入的这种形式不好吗? 这样简单
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 12:18:2223楼 得分:0
    引用 14 楼 happyflystone 的回复:
    1、不要加@
    2、应该是你的程序问题吧

        你的程序只要调用,
          exec p_killspid  'Chaoshi' 
          RESTORE  DATABASE  Chaoshi  FROM  disk='E:\111.mdf' 

    那我上面的代码怎么调用啊?我是在程序里吧上述代码定义成字符串,然后执行此字符串?还有什么好方法??请高手指教?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 12:38:1124楼 得分:5
    LZ试试这样的写法

    Java code
    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 ";



    注意帮你加了N多空格
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 12:52:3025楼 得分:0
    hao de
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 13:00:5026楼 得分:0
    不行还是说go附近有语法错误
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 21:48:0227楼 得分:5
    GO 关键字  必须单独占用一行

    你程序输出的格式必须这样
    use master
    go(单独一行)
    if

    不能use master go if。。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 21:52:0528楼 得分:5
    /n是不是回车啊?
    哈哈,我不会用java
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 21:57:5629楼 得分:5
    \n\r
    这个?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 03:06:0130楼 得分:0
    谢谢大家的支持
    还是闹不出来
    最后我决定这样做:
    1、先在查询分析器里执行上面的代码即在master上定义一个存储过程 p_killspid
    2、然后再程序里定义String"use master  exec p_killspid  'Chaoshi' RESTORE  DATABASE  Chaoshi  FROM  disk='E:\111.mdf' "

    可是这样一来就有个问题,如果我换台机子必须还得在新机子sql server的master在创建一次存储过程,大家有没有什么好办法,在新机子上不用再创建存储过程,最好是在附加数据库的时候同时在master里附加存储过程
    如果我以上的想法不对千万别笑我,我数据库学的很烂!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 09:15:2431楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 09:22:5432楼 得分:5
    哈哈
    自动变成手动了

    UP
    关注
    修改