仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 677|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL编程:SQL Server 7.0 进门(八)

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:25:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。server存储过程当中前往了局
从存储过程当中前往了局有三种体例:
1、前往了局集
这是客户端使用程序前往了局的最通用的办法。了局集是经由过程利用SELECT语句选择数据发生的。了局集能够从永世表、一时表或部分变量中发生。将了局前往到另外一个存储历程不是一种无效的办法。存储历程不克不及会见另外一个存储历程创建的了局集。
比方从永世表中前往了局集:
USEpubs
GO
CREATEPROCEDUREap_CreateResultFromPermtable
AS
SELECTau_inameFROMauthors
GO
比方从部分变量中创立了局集:
USEpubs
GO
CREATEPROCEDUREap_CreateResultFromVariable
AS
DECLARE@au_inamechar(20)
SELECT@au_iname=au_inameFROMauthors
WHEREau_id=‘172-32-1176’
SELECT@au_id
GO
2、设置OUTPUT参数的值
输入参数常常用来从存储过程当中检索出了局。假如某个参数在传输到存储过程当中时被界说成OUTPUT,则对该参数的任何修正在加入存储以后仍旧无效。
比方:
USEpubs
GO
CREATEPROCEDUREap_SetOutputVar@countintegerOUTPUT
AS
SELECT@count=count(*)FROMauthors
GO
从输入参数中检索出值:
USEpubs
GO
CREATEPROCEDUREap_GetOutputVar
AS
DECLARE@numinteger
EXECUTEap_SetOutputVar@numOUTPUT
PRINT“thecountis”+convert(char,@num)
GO
・将游标利用成OUTPUT参数。游标可使用OUTPUT(输入)参数,但不克不及利用成输出参数。也就是说,游标能够作为了局前往,但却不克不及传输到过程当中往。当游标被用作参数时,必要限制其为OUTPUT和VARYING。VARYING关头字指出该了局集要用来撑持输入参数。如许就供应了将了局集前往到挪用历程的才能。
比方:
USEpubs
GO
CREATEPROCEDUREGetTitleCount@count_cursorCURSORVARYINGOUTPUT
AS
SET@count_cursor=CURSOR
FOR
SELECTau_id,count(*)
FROMtitleauthors
GROUPBYau_id
OPEN@count_cursor
GO
3、经由过程RETURN参数前往形态
这是一种从存储历程前往毛病码的办法。存储历程老是前往一个形态值,用户也能够利用RETURN语句前往本人的形态。
比方:
USEpubs
GO
CREATEPROCEDUREap_SetReturnStatus
AS
DECLARE@countinteger
SELECT@count=count(*)FROMauthors
IF@count=0
RETURN(1)
ELSE
RETURN(0)
GO
比方检索出前往的形态:
USEpubs
GO
CREATEPROCEDUREap_GetReturnStatus
AS
DECLARE@statusinteger
EXECUTE@status=ap_SetReturnStatus
IF@status=1
PRINT“Norowsfound”
ELSE
PRINT“successful”
GO

在存储过程当中举行毛病处置
好像别的程序一样,在存储过程当中举行毛病处置长短常主要的。体系变动@@error在实行每个TransactSQL语句以后城市失掉一个值。关于乐成的实行,@@error的值为0,假如呈现毛病,则@@error中将包括毛病信息。@@error体系变量对存储历程的毛病处置长短常主要的。
注重:为了避免毛病,@@error所能设置的值在sysmessages表的“error”中反应了出来。
在存储过程当中的毛病有两品种型:
1、数据库相干的毛病
这些毛病是由数据库的纷歧致性引发的,体系利用非0的@@error值暗示特定的数据库成绩。在TransactSQL实行以后,能够经由过程@@error取得所呈现的毛病。假如发明@@error不为0,则必需接纳需要的举动,年夜多半情形下,存储将不再持续举行处置而前往。上面的示例展现了典范的猎取数据库毛病的办法。该历程将毛病代码安排到输入变量中,如许,挪用程序就可以够会见到。
USEpubs
GO
CREATEPROCEDUREap_TrapDatabaseError@return_codeintegerOUTPUT
AS
UPDATEauthorsSETau_iname=“Jackson”
WHEREau_iname=“Smith”
IF@@error0
BEGIN
SELECT@return_code=@@error
RETURN
END
ELSE
@return_code=0
GO
2、营业逻辑毛病
这些毛病是因为违背了营业划定规矩而引发的。要猎取这些毛病,起首必要界说营业划定规矩,基于这些划定规矩,必要在存储过程当中增添需要的毛病检测代码。人们常常利用RAISERROR语句传递这些毛病。RAISERROR供应了前往用户界说毛病及将@@error变量设置成用户界说毛病号的才能。毛病动静能够主动态地创建,大概基于毛病号从“sysmessages”表中检索到。一旦呈现了毛病,毛病就会以一种服务器毛病动静的体例前往到客户机。上面是RAISERROR命令的语法:
RAISERROR(msg_id|msg_str,severity,state
[,argument][,…n]])
[WITHoptions]
Msg_id指明用户界说动静的id,该动静存储在“sysmessages”体系表中。
Msg_str用于静态创立动静的动静字符串。这与C言语中的“printf”十分类似。
Severity界说用户赋值的毛病动静严峻水平。
State是从1到127的恣意整数值,它暗示毛病的挪用形态信息。正数的state值将缺省为1。
OPTIONS指明毛病的定制选项。OPTIONS的无效值以下:
1)LOG。
将毛病纪录到服务器毛病日记和NT事务日记中。该选项必要动静带有从19到25的严峻水平。而只要体系办理员才干收回这类动静。
2)NOWAIT。
将动静当即发送到客户端服务器。
3)SETERROR。
不论其严峻级别怎样,将@@error的值设置为msg_id或5000。

远程历程挪用
SQLServer供应了挪用驻留在分歧服务器上的存储历程的才能。挪用如许的存储历程称呼远程存储历程挪用。为了使得挪用能从一个SQLServer转移到另外一个服务器,两个服务器应当互相界说成对方的无效远程服务器。
设置远程服务器的设置:
・扩大某个服务器的组。
・右击该服务器并点击“Properties”。
・设置选项“AllowotherSQLServerstoconnectremotelytothisSQLserverviaRPC”。
・设置“Querytimeout”选项的值,该值指定从一个查询处置前往所能守候的秒数。缺省值为0,暗示同意无穷的守候工夫。
・设置完成设置选项以后,点击“OK”。
・从头启动服务器以后,修正将会失效。
・在另外一台远程服务器上反复不异的步骤。
挪用远程存储历程必要指明服务器的称号,后带数据库的称号和具有者的称号。上面是在分歧的服务器(Server2)上挪用一个存储历程的示例。
Execserver2.pubs.dbo.myproc

豆豆的后话:
这里只是深刻的先容了SQLServer经常使用的常识,工具也是基于SQLServer数据库编写使用程序的编程职员,而非数据库办理者。但关于使用程序编程者,懂得数据库的办理也长短常有效的。倡议在今后的工夫自行往懂得数据库的办理,这关于优化程序也是相称有效的。MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。经过一些测试后,开发者得出结论:mSQL并没有他们需要的那么快和灵活。
沙发
发表于 2015-1-19 11:32:16 来自手机 | 只看该作者
sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-1-24 12:55:33 | 只看该作者
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
金色的骷髅 该用户已被删除
地板
发表于 2015-2-1 15:53:15 | 只看该作者
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
活着的死人 该用户已被删除
5#
发表于 2015-2-7 07:23:54 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
乐观 该用户已被删除
6#
 楼主| 发表于 2015-2-21 01:07:00 | 只看该作者
其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
谁可相欹 该用户已被删除
7#
发表于 2015-3-6 19:30:12 | 只看该作者
从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。
冷月葬花魂 该用户已被删除
8#
发表于 2015-3-13 06:35:45 | 只看该作者
varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。
莫相离 该用户已被删除
9#
发表于 2015-3-20 15:19:09 | 只看该作者
原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 00:16

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表