仓酷云

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

[学习教程] 清空SQL SERVER数据库中一切指定表中数据的办理计划

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。我们都晓得,假如是清空数据库中一切表的数据的,那对照好办,只需使用体系表sys.tables查询出数据库中一切表信息,然后再用游标轮回清空就行了,附SQL语句以下:
declare@tbnamevarchar(255)
declare#tbcursorforselectnamefromsys.tables
open#tb
fetchnextfrom#tbinto@tbname
while@@fetch_status=0
begin
exec(deletefrom[+@tbname+])
fetchnextfrom#tbinto@tbname
end
close#tb
deallocate#tb

有关sys.tables的用法,请参考本站:
使用SQL语句查询数据库中一切表
但偶然候我们是要有选择性的清空某些表信息,小编比来就碰到这类情形,我只需清空小编卖力的ERP体系中的一切营业流程数据,而基本信息与体系设置信息是不克不及被扫除的,怎样办呢?为了达了疾速与反复使用的目标,小编把本人的办理计划附下:
先创立一个设置表,表名为:Sys_TableExtendedProperties
表字段以下:
TableName-存储体系中一切表的表名
IsSystem-指定表是不是为体系表
IsBaseInformation-指定表是不是为基本数据表
……
别的字段,请人人依据本人的必要增加
然后我们将一切表的信息增加到表中(此步骤固然啰嗦,但为了今后的疾速挪用,如今啰嗦点也是值得的),然后,我们写一个存储历程来清空指定命据。
/*
创立工夫:2011-10-11
功效:扫除一切指定表的数据
创立人:程序食堂http://www.lmwlove.com
*/
createprocedureClearDate
@sourcetypeint
as
setnocountondeclare@TableNamevarchar(128)
declare@T_Tabletable(TableNamevarchar(128)notnull)
--猎取要删除数据的表
if(sourcetype=1)--假如sourcetype=1,删除一切体系数据
begin
insertinto@T_Table(TableName)
selectname
fromsys.tables
whereexists(select*fromSys_TableExtendedProperties
whereSys_TableExtendedProperties.TableName=sys.tables.name
andSys_TableExtendedProperties.IsSystemTable=1)
orderbyname
end
elseif(sourcetype=2)--假如sourcetype=2,删除一切基本数据
begin
insertinto@T_Table(TableName)
selectname
fromsys.tables
whereexists(select*fromSys_TableExtendedProperties
whereSys_TableExtendedProperties.TableName=sys.tables.name
andSys_TableExtendedProperties.IsBaseInformation=1)
orderbyname
end
else--假如sourcetype即是别的值,删除一切营业数据
begin
insertinto@T_Table(TableName)
selectname
fromsys.tables
whereexists(select*fromSys_TableExtendedProperties
whereSys_TableExtendedProperties.TableName=sys.tables.name
andSys_TableExtendedProperties.IsSystemTable=0
andSys_TableExtendedProperties.IsBaseInformation=0)
orderbyname
end
whileexists(select*from@T_Table)
begin
--随机取表名
selecttop1@TableName=TableName
from@T_Table
orderbynewid()
begintry
--实验扫除表数据
ifnotexists(select*fromsysforeignkeys
whereobject_name(rkeyid)=@TableName)
begin
exec(truncatetable+@TableName)
end
else
begin
--删除表数据(假如有触发器,先封闭触发器)
--禁用与启用触发器,请拜见本站:
使用Sql禁用与启用触发器
exec(altertable+@TableName+disabletriggeralldeletefrom+@TableName+altertable+@TableName+enabletriggerall)
--有自增栏位
ifexists(select*fromsyscolumns
whereid=object_id(@TableName)
andcolstat=1)
begin
--将自增栏位以后标识值置为0
DBCCCHECKIDENT(@TableName,RESEED,0)
end
end
delete@T_TablewhereTableName=@TableName
endtry
begincatch
endcatch
end

如今,我们恣意时分想清空指定表数据时,实行该存储历程便可。MyISAMMysql的默认数据库,最为常用。拥有较高的插入,查询速度,但不支持事务
深爱那片海 该用户已被删除
沙发
发表于 2015-1-18 12:14:29 | 只看该作者
索引视k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。
海妖 该用户已被删除
板凳
发表于 2015-1-26 16:36:37 | 只看该作者
连做梦都在想页面结构是怎么样的,绝非虚言
变相怪杰 该用户已被删除
地板
发表于 2015-2-10 09:00:11 | 只看该作者
其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
小妖女 该用户已被删除
5#
发表于 2015-3-1 07:45:40 | 只看该作者
总感觉自己还是不会SQL
小女巫 该用户已被删除
6#
发表于 2015-3-10 13:11:45 | 只看该作者
你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。
再见西城 该用户已被删除
7#
 楼主| 发表于 2015-3-17 08:11:19 | 只看该作者
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 00:34

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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