|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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的默认数据库,最为常用。拥有较高的插入,查询速度,但不支持事务 |
|