首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 创建存储过程就报错,问题解决闪电结贴 [已结贴,结贴人:xi_ha]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-18 12:06:53 楼主
    所用数据库为:sql server2000
    现象:创建存储过程就报错,其他操作正常,比如select ,create table等。
    错误:
    服务器: 消息 823,级别 24,状态 2,过程 update_jf_zzyw 行 35
    ODBC: 消息 0,级别 16,状态 1
    通讯链接失败
    ODBC: 消息 0,级别 16,状态 1
    通讯链接失败

    连接中断
    -------------------------------------
    不需要长篇理论,请说如何解决,有代码最好。完了马上结贴。

    30  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-18 12:12:351楼 得分:0
    把代码贴上来看看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    发表于:2008-01-18 12:19:562楼 得分:0
    SQL code
    示例 A. 使用带有复杂 SELECT 语句的简单过程 下面的存储过程从四个表的联接中返回所有作者(提供了姓名)、出版的书籍以及出版社。该存储过程不使用任何参数。 USE pubs IF EXISTS (SELECT name FROM sysobjects WHERE name = 'au_info_all' AND type = 'P') DROP PROCEDURE au_info_all GO CREATE PROCEDURE au_info_all AS SELECT au_lname, au_fname, title, pub_name FROM authors a INNER JOIN titleauthor ta ON a.au_id = ta.au_id INNER JOIN titles t ON t.title_id = ta.title_id INNER JOIN publishers p ON t.pub_id = p.pub_id GO au_info_all 存储过程可以通过以下方法执行: EXECUTE au_info_all -- Or EXEC au_info_all 如果该过程是批处理中的第一条语句,则可使用: au_info_all B. 使用带有参数的简单过程 下面的存储过程从四个表的联接中只返回指定的作者(提供了姓名)、出版的书籍以及出版社。该存储过程接受与传递的参数精确匹配的值。 USE pubs IF EXISTS (SELECT name FROM sysobjects WHERE name = 'au_info' AND type = 'P') DROP PROCEDURE au_info GO USE pubs GO CREATE PROCEDURE au_info @lastname varchar(40), @firstname varchar(20) AS SELECT au_lname, au_fname, title, pub_name FROM authors a INNER JOIN titleauthor ta ON a.au_id = ta.au_id INNER JOIN titles t ON t.title_id = ta.title_id INNER JOIN publishers p ON t.pub_id = p.pub_id WHERE au_fname = @firstname AND au_lname = @lastname GO au_info 存储过程可以通过以下方法执行: EXECUTE au_info 'Dull', 'Ann' -- Or EXECUTE au_info @lastname = 'Dull', @firstname = 'Ann' -- Or EXECUTE au_info @firstname = 'Ann', @lastname = 'Dull' -- Or EXEC au_info 'Dull', 'Ann' -- Or EXEC au_info @lastname = 'Dull', @firstname = 'Ann' -- Or EXEC au_info @firstname = 'Ann', @lastname = 'Dull' 如果该过程是批处理中的第一条语句,则可使用: au_info 'Dull', 'Ann' -- Or au_info @lastname = 'Dull', @firstname = 'Ann' -- Or au_info @firstname = 'Ann', @lastname = 'Dull' C. 使用带有通配符参数的简单过程 下面的存储过程从四个表的联接中只返回指定的作者(提供了姓名)、出版的书籍以及出版社。该存储过程对传递的参数进行模式匹配,如果没有提供参数,则使用预设的默认值。 USE pubs IF EXISTS (SELECT name FROM sysobjects WHERE name = 'au_info2' AND type = 'P') DROP PROCEDURE au_info2 GO USE pubs GO CREATE PROCEDURE au_info2 @lastname varchar(30) = 'D%', @firstname varchar(18) = '%' AS SELECT au_lname, au_fname, title, pub_name FROM authors a INNER JOIN titleauthor ta ON a.au_id = ta.au_id INNER JOIN titles t ON t.title_id = ta.title_id INNER JOIN publishers p ON t.pub_id = p.pub_id WHERE au_fname LIKE @firstname AND au_lname LIKE @lastname GO au_info2 存储过程可以用多种组合执行。下面只列出了部分组合: EXECUTE au_info2 -- Or EXECUTE au_info2 'Wh%' -- Or EXECUTE au_info2 @firstname = 'A%' -- Or EXECUTE au_info2 '[CK]ars[OE]n' -- Or EXECUTE au_info2 'Hunter', 'Sheryl' -- Or EXECUTE au_info2 'H%', 'S%' D. 使用 OUTPUT 参数 OUTPUT 参数允许外部过程、批处理或多条 Transact-SQL 语句访问在过程执行期间设置的某个值。下面的示例创建一个存储过程 (titles_sum),并使用一个可选的输入参数和一个输出参数。 首先,创建过程: USE pubs GO IF EXISTS(SELECT name FROM sysobjects WHERE name = 'titles_sum' AND type = 'P') DROP PROCEDURE titles_sum GO USE pubs GO CREATE PROCEDURE titles_sum @@TITLE varchar(40) = '%', @@SUM money OUTPUT AS SELECT 'Title Name' = title FROM titles WHERE title LIKE @@TITLE SELECT @@SUM = SUM(price) FROM titles WHERE title LIKE @@TITLE GO 接下来,将该 OUTPUT 参数用于控制流语言。 说明 OUTPUT 变量必须在创建表和使用该变量时都进行定义。 参数名和变量名不一定要匹配,不过数据类型和参数位置必须匹配(除非使用 @@SUM = variable 形式)。 DECLARE @@TOTALCOST money EXECUTE titles_sum 'The%', @@TOTALCOST OUTPUT IF @@TOTALCOST < 200 BEGIN PRINT ' ' PRINT 'All of these titles can be purchased for less than $200.' END ELSE SELECT 'The total cost of these titles is $' + RTRIM(CAST(@@TOTALCOST AS varchar(20))) 下面是结果集: Title Name ------------------------------------------------------------------------ The Busy Executive's Database Guide The Gourmet Microwave The Psychology of Computer Cooking (3 row(s) affected) Warning, null value eliminated from aggregate. All of these titles can be purchased for less than $200. E. 使用 OUTPUT 游标参数 OUTPUT 游标参数用来将存储过程的局部游标传递回调用批处理、存储过程或触发器。 首先,创建以下过程,在 titles 表上声明并打开一个游标: USE pubs IF EXISTS (SELECT name FROM sysobjects WHERE name = 'titles_cursor' and type = 'P') DROP PROCEDURE titles_cursor GO CREATE PROCEDURE titles_cursor @titles_cursor CURSOR VARYING OUTPUT AS SET @titles_cursor = CURSOR FORWARD_ONLY STATIC FOR SELECT * FROM titles OPEN @titles_cursor GO 接下来,执行一个批处理,声明一个局部游标变量,执行上述过程以将游标赋值给局部变量,然后从该游标提取行。 USE pubs GO DECLARE @MyCursor CURSOR EXEC titles_cursor @titles_cursor = @MyCursor OUTPUT WHILE (@@FETCH_STATUS = 0) BEGIN FETCH NEXT FROM @MyCursor END CLOSE @MyCursor DEALLOCATE @MyCursor GO F. 使用 WITH RECOMPILE 选项 如果为过程提供的参数不是典型的参数,并且新的执行计划不应高速缓存或存储在内存中,WITH RECOMPILE 子句会很有帮助。 USE pubs IF EXISTS (SELECT name FROM sysobjects WHERE name = 'titles_by_author' AND type = 'P') DROP PROCEDURE titles_by_author GO CREATE PROCEDURE titles_by_author @@LNAME_PATTERN varchar(30) = '%' WITH RECOMPILE AS SELECT RTRIM(au_fname) + ' ' + RTRIM(au_lname) AS 'Authors full name', title AS Title FROM authors a INNER JOIN titleauthor ta ON a.au_id = ta.au_id INNER JOIN titles t ON ta.title_id = t.title_id WHERE au_lname LIKE @@LNAME_PATTERN GO G. 使用 WITH ENCRYPTION 选项 WITH ENCRYPTION 子句对用户隐藏存储过程的文本。下例创建加密过程,使用 sp_helptext 系统存储过程获取关于加密过程的信息,然后尝试直接从 syscomments 表中获取关于该过程的信息。 IF EXISTS (SELECT name FROM sysobjects WHERE name = 'encrypt_this' AND type = 'P') DROP PROCEDURE encrypt_this GO USE pubs GO CREATE PROCEDURE encrypt_this WITH ENCRYPTION AS SELECT * FROM authors GO EXEC sp_helptext encrypt_this 下面是结果集: The object's comments have been encrypted. 接下来,选择加密存储过程内容的标识号和文本。 SELECT c.id, c.text FROM syscomments c INNER JOIN sysobjects o ON c.id = o.id WHERE o.name = 'encrypt_this' 下面是结果集: 说明 text 列的输出显示在单独一行中。执行时,该信息将与 id 列信息出现在同一行中。 id text ---------- ------------------------------------------------------------ 1413580074 ?????????????????????????????????e?????????????????????????????????????????????????????????????????????????? (1 row(s) affected)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-18 13:33:103楼 得分:0
    代码就是:

    create proc search_aa
    as
    select * from aaa
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-18 13:36:324楼 得分:0
    是其他错误,语法绝对正确
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-18 13:38:455楼 得分:0
    数据坏了?
    select * from aaa抱错吧!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-18 13:38:596楼 得分:0
    看看你的过程update_jf_zzyw是什么啊?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-18 13:39:237楼 得分:0
    楼主给的代码不全吧!
    否则怎么会出现
    服务器:  消息  823,级别  24,状态  2,过程  update_jf_zzyw  行  35
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-18 13:40:128楼 得分:0
    错误:
    服务器:  消息  823,级别  24,状态  2,过程  update_jf_zzyw  行  35
    ODBC:  消息  0,级别  16,状态  1
    通讯链接失败
    ODBC:  消息  0,级别  16,状态  1
    通讯链接失败
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-18 13:43:119楼 得分:5
    dbcc  checktable('表名') 
    多半表或硬盘出了问题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-18 13:50:0810楼 得分:20
    Microsoft® SQL Server™ 在对某设备进行读或写请求时遇到 I/O 错误。该错误通常表明磁盘问题。但是,错误日志中在错误 823 之前记录的其它核心消息应指出涉及了哪个设备。

    要么打开windows的应用日志,要么使用DBCC CHECKDB检查,获得错误设备,然后更换。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-18 14:17:0111楼 得分:0
    谢谢大家,是的,存储过程绝对没有问题,不要细究过程啊,
    这段代码是测试用的:
    create  proc  search_aa
    as
    select  *  from  aaa

    我刚才网上搜索了一下,用修复命令检测了一下数据库rst,发现报错
    exec sp_dboption 'rst' , N'single', N'true' --将目标数据库置为单用户状态

    dbcc checkdb('rst' ,REPAIR_ALLOW_DATA_LOSS)
    dbcc checkdb('rst' ,REPAIR_REBUILD)

    exec sp_dboption 'rst', N'single', N'false'--将目标数据库置为多用户状态

    ----------------------------------------------------------帖出部分的检测结果如下:
    服务器: 消息 8928,级别 16,状态 1,行 1
    对象 ID 1,索引 ID 2: 未能处理页 (1:284)。详细信息请参阅其它错误。
    服务器: 消息 8939,级别 16,状态 1,行 1
    表错误: 对象 ID 1,索引 ID 2,页 (1:284)。测试(IS_ON (BUF_IOERR, bp->bstat) && bp->berrcode)失败。值为 2057 和 -1。
    服务器: 消息 8976,级别 16,状态 1,行 1
    表错误: 对象 ID 1,索引 ID 2。在扫描操作中未发现页 (1:284),而其父代 (1:75) 和上一页 (1:281) 指向了该页。请检查先前的错误。
    服务器: 消息 8978,级别 16,状态 1,行 1
    表错误: 对象 ID 1,索引 ID 2。页 (1:1186) 缺少上一页 (1:284) 对它的引用。可能是因为链的链接有问题。
    服务器: 消息 8978,级别 16,状态 1,行 1
    表错误: 对象 ID 1,索引 ID 3。页 (1:283) 缺少上一页 (1:285) 对它的引用。可能是因为链的链接有问题。
    服务器: 消息 8928,级别 16,状态 1,行 1
    对象 ID 1,索引 ID 3: 未能处理页 (1:285)。详细信息请参阅其它错误。
    服务器: 消息 8976,级别 16,状态 1,行 1
    表错误: 对象 ID 1,索引 ID 3。在扫描操作中未发现页 (1:285),而其父代 (1:77) 和上一页 (1:282) 指向了该页。请检查先前的错误。
    服务器: 消息 8929,级别 16,状态 1,行 1
    对象 ID 2: 在文本 ID 24051712 中发现错误,该文本的所有者是由 RID = (1:31:4) id = 1986106116 and indid = 2 标识的数据记录。
    服务器: 消息 8929,级别 16,状态 1,行 1
    对象 ID 2: 在文本 ID 24117248 中发现错误,该文本的所有者是由 RID = (1:31:5) id = 1986106116 and indid = 3 标识的数据记录。
    服务器: 消息 8929,级别 16,状态 1,行 1
    对象 ID 2: 在文本 ID 24182784 中发现错误,该文本的所有者是由 RID = (1:31:18) id = 2002106173 and indid = 2 标识的数据记录。
    服务器: 消息 8929,级别 16,状态 1,行 1
    对象 ID 2: 在文本 ID 24248320 中发现错误,该文本的所有者是由 RID = (1:31:19) id = 2002106173 and indid = 3 标识的数据记录。
    服务器: 消息 8929,级别 16,状态 1,行 1
    对象 ID 2: 在文本 ID 19529728 中发现错误,该文本的所有者是由 RID = (1:152:1) id = 965578478 and indid = 2 标识的数据记录。
    服务器: 消息 8929,级别 16,状态 1,行 1
    对象 ID 2: 在文本 ID 23003136 中发现错误,该文本的所有者是由 RID = (1:152:8) id = 978102525 and indid = 2 标识的数据记录。
    服务器: 消息 8929,级别 16,状态 1,行 1
    对象 ID 2: 在文本 ID 23068672 中发现错误,该文本的所有者是由 RID = (1:152:9) id = 978102525 and indid = 3 标识的数据记录。
    服务器: 消息 8929,级别 16,状态 1,行 1
    对象 ID 2: 在文本 ID 21692416 中发现错误,该文本的所有者是由 RID = (1:154:1) id = 1733581214 and indid = 2 标识的数据记录。
    服务器: 消息 8929,级别 16,状态 1,行 1
    对象 ID 2: 在文本 ID 21757952 中发现错误,该文本的所有者是由 RID = (1:154:2) id = 1733581214 and indid = 3 标识的数据记录。
    服务器: 消息 8929,级别 16,状态 1,行 1
    对象 ID 2: 在文本 ID 20054016 中发现错误,该文本的所有者是由 RID = (1:158:3) id = 1093578934 and indid = 2 标识的数据记录。
    服务器: 消息 8929,级别 16,状态 1,行 1
    对象 ID 2: 在文本 ID 20119552 中发现错误,该文本的所有者是由 RID = (1:158:10) id = 1109578991 and indid = 2 标识的数据记录。

    表错误: 对象 ID 2。text、ntext 或 image 节点(位于页 (1:286),槽 38,文本 ID 21299200)被页 (1:9111313),槽 18 引用,但在扫描中未曾发现该节点。
    服务器: 消息 8965,级别 16,状态 1,行 1
    表错误: 对象 ID 2。text、ntext 或 image 节点(位于页 (1:286),槽 39,文本 ID 21364736)被页 (1:9111313),槽 19 引用,但在扫描中未曾发现该节点。
    服务器: 消息 8965,级别 16,状态 1,行 1
    表错误: 对象 ID 2。text、ntext 或 image 节点(位于页 (1:286),槽 40,文本 ID 21430272)被页 (1:10751172),槽 4 引用,但在扫描中未曾发现该节点。
    服务器: 消息 8965,级别 16,状态 1,行 1
    表错误: 对象 ID 2。text、ntext 或 image 节点(位于页 (1:286),槽 41,文本 ID 21495808)被页 (1:10751172),槽 5 引用,但在扫描中未曾发现该节点。
    服务器: 消息 8965,级别 16,状态 1,行 1
    表错误: 对象 ID 2。text、ntext 或 image 节点(位于页 (1:286),槽 42,文本 ID 21561344)被页 (1:10751168),槽 3 引用,但在扫描中未曾发现该节点。
    'rst' 的 DBCC 结果。
    'sysobjects' 的 DBCC 结果。
            DBCC 语句的修复级别导致回避了此修复。
            DBCC 语句的修复级别导致回避了此修复。
            DBCC 语句的修复级别导致回避了此修复。
            DBCC 语句的修复级别导致回避了此修复。
            DBCC 语句的修复级别导致回避了此修复。
            DBCC 语句的修复级别导致回避了此修复。
            DBCC 语句的修复级别导致回避了此修复。
    对象 'sysobjects' 有 1798 行,这些行位于 27 页中。
    CHECKDB 发现了 0 个分配错误和 7 个一致性错误(在表 'sysobjects' 中,该表的对象 ID 为 1)。
    'sysindexes' 的 DBCC 结果。
            DBCC 语句的修复级别导致回避了此修复。
    系统无法自修复此错误。
    系统无法自修复此错误。
    系统无法自修复此错误。
    系统无法自修复此错误。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-18 14:26:2312楼 得分:0
    期待高手出现呀,怎么处理哦,
    我又检测了一下:

    DBCC CHECKCATALOG ('rst') with NO_INFOMSGS


    服务器: 消息 601,级别 12,状态 3,行 1
    由于数据移动,未能继续以 NOLOCK 方式扫描。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-18 14:30:2813楼 得分:0
    不好弄啊!楼主自己去google搜索下

    消息  823,级别  24,状态  2

    也许能找到答案,不好弄啊!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-18 14:51:4214楼 得分:0
    辛苦下大家了,只能加点分,处理完,100结帖。

    我刚刚又查看了SQL的日志文件,有信息显示:

    I/O error (bad page ID) detected during read at offset 0x0000000023a000 in file 'D:\data\rst.MDF'.。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-18 15:57:2715楼 得分:5
    帮顶一下,数据库有问题了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-22 13:50:4316楼 得分:0
    数据库有问题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-01-22 14:02:1417楼 得分:0
    Microsoft®  SQL  Server™  在对某设备进行读或写请求时遇到  I/O  错误。该错误通常表明磁盘问题。但是,错误日志中在错误  823  之前记录的其它核心消息应指出涉及了哪个设备。
    数据库问题,有可能是硬件损坏。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved