仓酷云

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

[学习教程] MSSQL网站制作之用SQLServer完成数据表中,将恣意一笔记...

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

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

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

x
Mysql的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。server|sqlserver|数据
--定位数据
--计划思绪:
--保留要被挪动纪录的原主键值和新主键值(假如有主键的话),然后对照两个主键值的巨细(纪录信息按升序分列),
--假如原主键值年夜,标明该纪录被挪动到后面的新地位,可将原地位的纪录信息保留上去,并将重新地位的纪录信息到
--原纪录的前一笔记录的信息依次往下挪动,把保留的原纪录挪动到新地位便可。
--假如原主键值小,标明该纪录被挪动到前面的新地位,可将原地位的纪录信息保留上去,并将重新地位的纪录信息到
--原纪录的下一笔记录的信息依次往上挪动,把保留的原纪录挪动到新地位便可。实践上就是纪录块的挪动.
--可是,假如数据表中的数据十分复杂,该存储历程的实行效力将会下落.


Usezzydb

--创立举例表(先生信息表)
CreateTableT_StudentsInfo
(i_idintidentity(1,1),--体系自增流水号
c_Stu_IDnvarchar(10),--学号
c_ClassNamenvarchar(50),--班级
d_BirthDaydatetime)--出身日期
go

--向举例表中拔出4条先生信息,以考证上面的存储历程(sp_MyAdjustRecordOrder)
InsertintoT_StudentsInfovalues(001,年夜二三班,1978-01-25)
InsertintoT_StudentsInfovalues(002,年夜一六班,1979-02-05)
InsertintoT_StudentsInfovalues(003,年夜四三班,1981-07-15)
InsertintoT_StudentsInfovalues(004,年夜三一班,1976-01-05)

select*fromT_StudentsInfo

ifobject_id(sp_MyAdjustRecordOrder)0
dropprocsp_MyAdjustRecordOrder
go

CreateProcsp_MyAdjustRecordOrder(@OldStuIdnvarchar(10),@NewStuIdnvarchar(10))
as
--@OldStuid先生学号(用以暗示被挪动的纪录),
--@NewStuid先生学号(用以暗示将被挪动的纪录拔出的新地位)
begin
declare@Old_i_idint,@New_i_idint
declare@i_BlockCountint--行将被挪动的纪录块条数
declare@iint--轮回变量

--取得id值
Select@Old_i_id=(selectI_idfromT_StudentsInfowherec_Stu_ID=@OldStuId)
Select@New_i_id=(selectI_idfromT_StudentsInfowherec_Stu_ID=@NewStuId)
select@i_BlockCount=abs(@Old_i_id-@New_i_id)

--保留被挪动的先生信息
Selectc_Stu_ID,c_ClassName,d_BirthDay
intoNew_StudentsInfo--一时创立的表,用完后删除
fromT_StudentsInfo
wherec_Stu_ID=@OldStuId


if@New_i_id<@Old_i_id--将原纪录信息挪动到了后面
begin
select@i=0
while@i<=@i_BlockCount-1
begin
updateT_StudentsInfo
setc_Stu_ID=T2.c_Stu_ID,
c_ClassName=T2.c_ClassName,
d_BirthDay=T2.d_BirthDay
FromT_StudentsInfo,T_StudentsInfoT2
where(T_StudentsInfo.i_id=@Old_i_id-@i)and
(T2.i_id=@Old_i_id-@i-1)

select@i=@i+1
end
end

if@New_i_id>@Old_i_id--将原纪录信息挪动到了前面
begin
select@i=0
while@i<=@i_BlockCount-1
begin
updateT_StudentsInfo
setc_Stu_ID=T2.c_Stu_ID,
c_ClassName=T2.c_ClassName,
d_BirthDay=T2.d_BirthDay
FromT_StudentsInfo,T_StudentsInfoT2
where(T_StudentsInfo.i_id=@Old_i_id+@i)and
(T2.i_id=@Old_i_id+@i+1)

select@i=@i+1
end
end

updateT_StudentsInfo
setc_Stu_ID=T3.c_Stu_ID,
c_ClassName=T3.c_ClassName,
d_BirthDay=T3.d_BirthDay
FromT_StudentsInfoT1,New_StudentsInfoT3
where(T1.i_id=@New_i_id)

DroptableNew_StudentsInfo
--if@New_i_id=@Old_i_id--地位未产生改动,不做任那边理
end
go


--利用举例
--请求:将c_Stu_Id为004的先生信息挪动到c_Stu_Id为002的先生信息之前的地位.
--挪用存储历程sp_MyAdjustRecordOrder(004,002)便可.
--注重:这里的i_id必需是按次的。


--备份表数据信息,以便于对照
select*
intoStudentsInfoBackup
fromT_StudentsInfo

--对照了局是不是分歧
select*fromStudentsInfoBackup
select*fromT_StudentsInfo

--挪动数据纪录信息,挪用存储历程
execsp_MyAdjustRecordOrder003,002

--对照了局是不是修改
select*fromStudentsInfoBackup
select*fromT_StudentsInfo

在Windows中MySQL以服务形式存在,在使用前应确保此服务已经启动,未启动可用netstartmysql命令启动。而Linux中启动时可用“/etc/rc.d/init.d/mysqldstart"命令,注意启动者应具有管理员权限。
变相怪杰 该用户已被删除
沙发
发表于 2015-1-19 17:45:20 | 只看该作者
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
不帅 该用户已被删除
板凳
发表于 2015-1-27 05:05:16 | 只看该作者
原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。
只想知道 该用户已被删除
地板
发表于 2015-2-4 23:30:39 | 只看该作者
是要和操作系统进行Socket通讯的场景。否则建议慎重!
精灵巫婆 该用户已被删除
5#
发表于 2015-2-10 22:51:48 | 只看该作者
呵呵,这就是偶想说的
柔情似水 该用户已被删除
6#
发表于 2015-3-1 17:04:00 | 只看该作者
不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
金色的骷髅 该用户已被删除
7#
发表于 2015-3-10 21:22:27 | 只看该作者
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
admin 该用户已被删除
8#
发表于 2015-3-17 10:39:34 | 只看该作者
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
飘飘悠悠 该用户已被删除
9#
发表于 2015-3-24 07:40:21 | 只看该作者
习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 13:19

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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