仓酷云

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

[学习教程] MSSQL编程:保留数据库中其他工具稳定,删除数据库...

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

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

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

x
我们分析上面的两个操作,都有一个“删除数据”的过程。工具|数据|数据库
原帖内容:
如何把数据库中一切数据删除,然后把一切的主动增量复位?
表太多,没法手工完成。
http://community.csdn.net/Expert/topic/3094/3094555.xml?temp=.2920954

/*
--底本盘算如许
--先禁用一切外键束缚
execsp_msforeachtable"altertable?nocheckCONSTRAINTall"
--然后删除数据
execsp_msforeachtable"truncatetable?"
--再启用一切外键束缚
execsp_msforeachtable"altertable?checkconstraintall"
--可是禁用了今后,truncatetable不可,会提醒抵触
*/

--如今我的设法是(语句待优化):


--第一部分,天生创建外键的语句保留到#tmp
declare@namevarchar(200),@tmp1varchar(500),@tmp2varchar(500)

createtable#tmp
(
stringvarchar(8000)
)

SELECT表称号=object_name(b.fkeyid)
,外键称号=a.name
,援用的列名=(SELECTnameFROMsyscolumnsWHEREcolid=b.fkeyANDid=b.fkeyid)
,援用的表名=object_name(b.rkeyid)
,已援用的列名=(SELECTnameFROMsyscolumnsWHEREcolid=b.rkeyANDid=b.rkeyid)
into#tFROMsysobjectsa
joinsysforeignkeysbona.id=b.constid
joinsysobjectscona.parent_obj=c.id
wherea.xtype=fANDc.xtype=U

declarecur_testcursorfor
selecta.namefromsysobjectsajoinsysobjectscona.parent_obj=c.idwherea.xtype=fandc.xtype=U
opencur_test
FETCHNEXTFROMcur_testINTO@name
WHILE(@@fetch_status-1)
BEGIN
IF(@@fetch_status-2)
BEGIN
select@tmp1=,@tmp2=
select@tmp1=@tmp1+[+援用的列名+],,@tmp2=@tmp2+[+已援用的列名+],from#twhere外键称号=@name
insertinto#tmpselecttop1ALTERTABLE[DBO].[+表称号+]ADDCONSTRAINT[+@name+]FOREIGNKEY(+left(@tmp1,len(@tmp1)-1)+)REFERENCES[+援用的表名+](+left(@tmp2,len(@tmp2)-1)+)from#twhere外键称号=@name
END
FETCHNEXTFROMcur_testINTO@name
END

CLOSEcur_test
DEALLOCATEcur_test
droptable#t

--第二部分,删除一切外键
DECLARE@STRINGVARCHAR(8000)
WHILEEXISTS(SELECTNAMEFROMSYSOBJECTSWHERETYPE=F)
BEGIN
SELECT@STRING=ALTERTABLE+B.NAME+DROPCONSTRAINT+A.NAME+CHAR(13)
FROM(SELECTPARENT_OBJ,NAMEFROMSYSOBJECTSWHERETYPE=F)A,
(SELECTID,NAMEFROMSYSOBJECTSWHEREOBJECTPROPERTY(ID,NISUSERTABLE)=1)B
WHEREA.PARENT_OBJ=B.ID
EXEC(@STRING)
END

--第三部分,删除一切表的纪录,而且把identity复位
execsp_msforeachtable"truncatetable?"

--第4部分,实行#tmp内里的创建外键的语句,恢复外键
declarecur_test2cursorforselectstringfrom#tmp

opencur_test2
FETCHNEXTFROMcur_test2INTO@string
WHILE(@@fetch_status-1)
BEGIN
IF(@@fetch_status-2)
BEGIN
exec(@string)
PRINT@STRING
END
FETCHNEXTFROMcur_test2INTO@string
END

CLOSEcur_test2
DEALLOCATEcur_test2

droptable#tmp

提供用于管理、检查、优化数据库操作的管理工具。
谁可相欹 该用户已被删除
沙发
发表于 2015-1-19 16:23:21 | 只看该作者
还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
第二个灵魂 该用户已被删除
板凳
发表于 2015-1-25 17:34:31 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
深爱那片海 该用户已被删除
地板
发表于 2015-2-3 12:06:07 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
变相怪杰 该用户已被删除
5#
发表于 2015-2-8 20:53:23 | 只看该作者
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
莫相离 该用户已被删除
6#
发表于 2015-2-26 10:34:04 | 只看该作者
微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。
山那边是海 该用户已被删除
7#
发表于 2015-3-8 13:34:27 | 只看该作者
然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情
柔情似水 该用户已被删除
8#
发表于 2015-3-16 01:21:28 | 只看该作者
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
海妖 该用户已被删除
9#
发表于 2015-3-22 18:31:01 | 只看该作者
XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-6-16 11:01

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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