仓酷云

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

[学习教程] MSSQL网站制作之对MSsql Server的view利用instead of t...

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

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

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

x
支持大型的数据库。可以处理拥有上千万条记录的大型数据库。server|视图
比来经常利用VIEW,但MSsqlServer不同意对联系关系两个基表以上的VIEW举行更新操纵。因为项目上的必要,花了一个早晨的工夫研讨了一下。抽点工夫把历程和心得纪录上去。

先看看威望说法:



可更新视图:

MicrosoftSQLServer2000以两种办法加强可更新视图的种别:



INSTEADOF触发器:能够在视图上创立INSTEADOF触发器,以使视图可更新。实行INSTEADOF触发器,而不是实行界说触发器的数据修正语句。该触发器利用户得以指定一套处置数据修正语句时必要实行的操纵。因而,假如在给定的数据修正语句(INSERT、UPDATE或DELETE)上存在视图的INSTEADOF触发器,则经由过程该语句可更新响应的视图。有关INSTEADOF触发器的更多信息,请拜见计划INSTEADOF触发器。



分区视图:假如视图属于称为"分区视图"的指定格局,则该视图的可更新性受限于某些限定。本主题稍后将会商分区视图及其可更新性。

需要时,SQLServer将"当地分区视图"分辨为一切介入表和视图都在统一SQLServer上的视图,而将"散布式分区视图"分辨为视图中最少有一个表驻留在分歧(远程)服务器上的视图。



假如视图没有INSTEADOF触发器,大概视图不是分区视图,则视图只要满意以下前提才可更新:



select_statement在选择列表中没有聚合函数,也不包括TOP、GROUPBY、UNION(除非视图是本主题稍后要形貌的分区视图)或DISTINCT子句。聚合函数能够用在FROM子句的子查询中,只需不修正函数前往的值。有关更多信息,请拜见聚合函数。



select_statement的选择列表中没有派生列。派生列是由任何非复杂列表达式(利用函数、加法或减法运算符等)所组成的了局集列。



select_statement中的FROM子句最少援用一个表。select_statement必需不但只包括非表格格局的表达式(即不是从表派生出的表达式)。比方,以下视图是不成更新的:

CREATEVIEWNoTableAS

SELECTGETDATE()ASCurrentDate,

@@LANGUAGEASCurrentLanguage,

CURRENT_USERASCurrentUser



INSERT、UPDATE和DELETE语句在能够援用可更新视图之前,也必需如上述前提指定的那样满意某些限定前提。只要当视图可更新,而且所编写的UPDATE或INSERT语句只修正视图的FROM子句援用的一个基表中的数据时,UPDATE和INSERT语句才干援用视图。只要当视图在其FROM子句中只援用一个表时,DELETE语句才干援用可更新的视图。



分区视图对照贫苦,本文彩用INSTEADOF触发器的办法办理!

我的实行以下:先创建两个表Table1、Table2。表布局分离以下:



备注:

1,个中Table2中的d字段为主动性,步长为默许值1

2,Table1中的a字段为主动性,步长为默许值1



然后,创建视图VIEW1:

SELECTdbo.Table2.d,dbo.Table2.e,dbo.Table1.b,dbo.Table1.c

FROMdbo.Table2INNERJOIN

dbo.Table1ONdbo.Table2.a=dbo.Table1.a

明显,该视图包括字段d,e,b,c四个字段



成绩很明白?怎样向这个视图增添数据呢?几番实验终极失掉准确的sql为:

CREATETRIGGERTrig_INS_VIEW1ONVIEW1

INSTEADOFINSERT

AS



DECLARE@aINT

DECLARE@bINT

BEGIN

SETNOCOUNTON



INSERTINTOTable1SELECTb,cFROMinserted

select@a=(max(a)+1)fromTable1

select@b=efrominserted

INSERTINTOTable2(a,e)VALUES(@a,@b)



END
Merge将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用
若天明 该用户已被删除
沙发
发表于 2015-1-19 20:37:07 | 只看该作者
这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?
山那边是海 该用户已被删除
板凳
发表于 2015-1-25 21:30:05 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
因胸联盟 该用户已被删除
地板
发表于 2015-2-4 03:00:25 | 只看该作者
大侠们有推荐的书籍和学习方法写下吧。
兰色精灵 该用户已被删除
5#
发表于 2015-2-27 06:19:18 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
深爱那片海 该用户已被删除
6#
发表于 2015-3-8 22:48:03 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
小女巫 该用户已被删除
7#
发表于 2015-3-16 16:30:48 | 只看该作者
无法深入到数据库系统层面去了解和探究
透明 该用户已被删除
8#
发表于 2015-3-22 23:41:42 | 只看该作者
换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-9 07:36

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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