仓酷云

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

[学习教程] MSSQL网站制作之主动天生对表举行拔出和更新的存储历程...

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

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

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

x
因此,我们的第一个“米”,就是二进制日志binlog必须是rowbased的。在rowbase下,二进制日志binlog同时记录了更新前后的整行记录。拔出|存储历程
我找到了两个存储历程,能主动天生对一个数据表的拔出和更新的存储历程,如今贡献给人人!

拔出:

Createproceduresp_GenInsert
@TableNamevarchar(130),
@ProcedureNamevarchar(130)
as
setnocounton
declare@maxcolint,
@TableIDint
set@TableID=object_id(@TableName)
select@MaxCol=max(colorder)
fromsyscolumns
whereid=@TableID
selectCreateProcedure+rtrim(@ProcedureName)astype,0ascolorderinto#TempProc
union
selectconvert(char(35),@+syscolumns.name)
+rtrim(systypes.name)
+casewhenrtrim(systypes.name)in(binary,char,nchar,nvarchar,varbinary,varchar)then(+rtrim(convert(char(4),syscolumns.length))+)
whenrtrim(systypes.name)notin(binary,char,nchar,nvarchar,varbinary,varchar)then
end
+casewhencolorder<@maxcolthen,
whencolorder=@maxcolthen
end
astype,
colorder
fromsyscolumns
joinsystypesonsyscolumns.xtype=systypes.xtype
whereid=@TableIDandsystypes.namesysname
union
selectAS,@maxcol+1ascolorder
union
selectINSERTINTO+@TableName,@maxcol+2ascolorder
union
select(,@maxcol+3ascolorder
union
selectsyscolumns.name
+casewhencolorder<@maxcolthen,
whencolorder=@maxcolthen
end
astype,
colorder+@maxcol+3ascolorder
fromsyscolumns
joinsystypesonsyscolumns.xtype=systypes.xtype
whereid=@TableIDandsystypes.namesysname
union
select),(2*@maxcol)+4ascolorder
union
selectVALUES,(2*@maxcol)+5ascolorder
union
select(,(2*@maxcol)+6ascolorder
union
select@+syscolumns.name
+casewhencolorder<@maxcolthen,
whencolorder=@maxcolthen
end
astype,
colorder+(2*@maxcol+6)ascolorder
fromsyscolumns
joinsystypesonsyscolumns.xtype=systypes.xtype
whereid=@TableIDandsystypes.namesysname
union
select),(3*@maxcol)+7ascolorder
orderbycolorder
selecttypefrom#tempprocorderbycolorder

更新:

Createproceduresp_GenUpdate
@TableNamevarchar(130),
@PrimaryKeyvarchar(130),
@ProcedureNamevarchar(130)
as
setnocounton
declare@maxcolint,
@TableIDint
set@TableID=object_id(@TableName)
select@MaxCol=max(colorder)
fromsyscolumns
whereid=@TableID
selectCreateProcedure+rtrim(@ProcedureName)astype,0ascolorderinto#TempProc
union
selectconvert(char(35),@+syscolumns.name)
+rtrim(systypes.name)
+casewhenrtrim(systypes.name)in(binary,char,nchar,nvarchar,varbinary,varchar)then(+rtrim(convert(char(4),syscolumns.length))+)
whenrtrim(systypes.name)notin(binary,char,nchar,nvarchar,varbinary,varchar)then
end
+casewhencolorder<@maxcolthen,
whencolorder=@maxcolthen
end
astype,
colorder
fromsyscolumns
joinsystypesonsyscolumns.xtype=systypes.xtype
whereid=@TableIDandsystypes.namesysname
union
selectAS,@maxcol+1ascolorder
union
selectUPDATE+@TableName,@maxcol+2ascolorder
union
selectSET,@maxcol+3ascolorder
union
selectsyscolumns.name+=@+syscolumns.name
+casewhencolorder<@maxcolthen,
whencolorder=@maxcolthen
end
astype,
colorder+@maxcol+3ascolorder
fromsyscolumns
joinsystypesonsyscolumns.xtype=systypes.xtype
whereid=@TableIDandsyscolumns.name@PrimaryKeyandsystypes.namesysname
union
selectWHERE+@PrimaryKey+=@+@PrimaryKey,(2*@maxcol)+4ascolorder
orderbycolorder
selecttypefrom#tempprocorderbycolorder
droptable#tempproc


有了rowbase的binlog后,我们来分析一下怎么实现闪回。平时的DML无非三种操作,增删改,先说三种操作的日志格式。
飘灵儿 该用户已被删除
沙发
发表于 2015-1-19 13:16:37 | 只看该作者
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
分手快乐 该用户已被删除
板凳
发表于 2015-1-25 08:43:30 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
活着的死人 该用户已被删除
地板
发表于 2015-2-2 20:25:25 | 只看该作者
备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
第二个灵魂 该用户已被删除
5#
发表于 2015-2-2 20:25:25 | 只看该作者
XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
山那边是海 该用户已被删除
6#
发表于 2015-2-8 05:06:29 | 只看该作者
需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。
海妖 该用户已被删除
7#
发表于 2015-2-24 06:48:29 | 只看该作者
我个人认为就是孜孜不懈的学习
精灵巫婆 该用户已被删除
8#
发表于 2015-3-7 11:54:26 | 只看该作者
习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。
变相怪杰 该用户已被删除
9#
发表于 2015-3-15 04:38:05 | 只看该作者
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
再见西城 该用户已被删除
10#
发表于 2015-3-21 18:27:18 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-29 14:47

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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