|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
恢复到之前的某个状态,是需要数据的。这数据可以是a)回滚步骤或者b)操作之前的数据状态原文。我要夸大的是,从手艺角度来讲,不利用T-SQL来编写存储历程是大概的。那末有无来由这么做呢?一种情形就是这是一个用来从一般文件大概收集服务中检索数据的CLR存储历程,并将数据格局设置为行集。这里大概就会用到不必要T-SQL的操纵――可是这并非对T-SQL存储历程才能的一个很好的比方。1.SQLServer2005中的存储历程并提问题
问:我在SQLServer2005中碰到了并提问题。我持有车票的大众汽车上有一些余暇的坐位。我在拔出发卖的查票之前,必要检察是不是另有余暇的坐位。我的存储历程做的事变以下所示:
以下为援用的内容:
CREATEPROCEDUREadd_ticket—parameters
DECLAREfree_seatsintBEGIN
TRANSACTIONSELECTfree_seats
=COUNT(*)FROMticketsWHERE
seat_is_not_takenIFfree_seats
0INSERTINTOticketsVALUES(…)
—someotherstatementsENDTRANSACTION
成绩就是两个历程能够同时读取余暇票数,而且都能够预定一张票,即便是那边已没有空余的了。我必要一种办法来避免一个历程在另外一个历程运转add_ticket程序,可是还没有拔出一张新票的时分读取空票的数目。
解答:你是准确的;更高的断绝级别也不会包管多个读者往同时往读取统一个数据行。但是,另有几种办法你能够完成这项事情。比方,你能够给每一个坐位分派一个唯一的标识符(意义是,唯一键——纷歧定是GUID),而且创立一个形貌哪些坐位已被预订了的表。在表上放一个UNIQUE束缚,你就能够确保统一个坐位不会被拔出两次了。
就是说,我以为一个更风趣的办法就是利用SQLServiceBroker。你能够为每一个公交创建一个会话,而且将这个会话的句柄寄存在一个表中,读者在实行RECEIVE之前能够参考这个表。经由过程这类体例,读者就能够准确地过滤。大众汽车上的每一个坐位都插一个动静到行列中。读者就能够复杂地RECEIVE到所需的动静(在这个过程当中,预定大众汽车上的坐位)。ServiceBroker会确保没有动静会被承受两次,也就是说你不会再碰到并提问题了。
2.SQLServer2005中的索引种别
问:SQLServer2005中是不是有新的索引种别了?
解答:SQLServer2005没无为干系表引进新的索引范例。基础上——聚簇和非聚簇索引是以B-trees的体例完成的——还仍旧在使用。但是,SQLServer2005的确包括了一些索引上的增强,不管是完整文本索引,仍是关于XML数据,别的这些增强还能够改良一些与干系型索引有关的成绩。
SQLServer2005的完整文本索引特征是全新的,而且是从头编写的。要取得这个特征的信息,请浏览NimishKhanolkar的MSDN播送文档,先容SQLServer2005中的全文本查找。
XML是SQLServer2005中别的一个在体例上产生了伟大变化的内容。如今关于开辟职员来讲有最高级的XML数据范例可用了。这个范例撑持XQuery查询言语,利用了这个范例的字段能够经由过程特别格局的XML索引被索引到。要懂得更多有关XML范例的信息,请查找MSDN上的文章。
另有林林总总的有关T-SQL索引命令的增强。大概最使人感乐趣的就是新的“在线”索引范例,它同意数据库办理员在不必要把用户锁到表表面的情形下实行索引保护义务。这个很有大概标志着数据库办理员必要比及夜里3点才干翻开保护窗口修改成绩的情况的闭幕!
3.关于表和字段的罕见名字束缚
问:甚么是罕见的对表和字段的名字束缚?
解答:SQLServer2000下的表和字段称号有1到128字节的限定,而且遵守用于标识的划定规矩。
第一个字母必需是以下的一种:
·UnicodeStandard2.0中划定的字母。
Unicode对字母的界说包含:拉丁字母,从A到Z,除来自其他言语的字母以外。
·下划线(_),at标记(@),大概数字标记(#)
在SQLServer中以这些标记作为标识符的入手下手具有特别的寄义。一个以at标记(@)开首的标识符暗示一个当地的变量大概参数。一个以数字标记(#)开首的标识符代表一个一时表大概历程。一个以两个数字标记(##)开首的标识符标识的是一个全局一时工具。
一些Transact-SQL函数的名字以两个at标记(@@)开首。为了不与这些函数搅浑,保举你不要利用两个at标记(@@)开首的标识符。
接上去的字母能够是以下的恣意几种:
·UnicodeStandard2.0界说的字母
·来自基本拉丁文大概其他语音的十进制数字
·at标记(@),美圆标记($),数字标记(#),大概下划线
标识符相对不克不及是Transact-SQL的保存字。SQLServer保存了一些年夜写和小写的保存字。内建的空间大概特别的字母都不同意呈现,只管你能够在好的老版本的Northwind中看到它们包括了内建的空间。你必需经由过程把它们括在括号中才能够会见。
4.不具有任何T-SQL常识的情形下编写SQLServer2005存储历程
问:有无大概在不懂得T-SQL的情形下编写存储历程?]
解答:作为已往几年内里微软试图用SQLServer2005的.NET集成来称霸市场的野心的了局,很多程序员都以为创立SQLServer存储历程不再必须T-SQL了。不幸的是(大概并不是云云,这依据你的概念),这其实不满是现实。在手艺上是能够在不懂得T-SQL的情形下创立存储历程的,可是没有T-SQL的话则没法会见任何的数据。
在CLR存储历程外部举行数据会见,是经由过程利用尺度的ADO.NET类来完成的。开辟职员会在使用程序层发明良多一样的没有效处的数据会见代码,这些代码会很容易地转移到SQLCLR例程中往。傍边间层的这些ADO.NET类必要利用T-SQL来会见数据的时分,在CLR主机供应的情况中就会利用一样的类。
对于update操作,只需要把event中的旧行和新行值对调即可。 |
|