资源描述:
《自动生成清空数据库的SQL语句.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、自动生成清空数据库的SQL语句(V2.0)之前写的那脚本没有注意到这重置标识值的问题。1、当我们向一个含有标识列的表插入数据后,再执行Delete From TableNameDBCC Checkident ('TableName',Reseed,0)然后插入新数据,开始值是从1开始。这样处理是正确的。 2、当我们新建一个表,在没有插入数据,就执行Delete From TableNameDBCC Checkident ('TableName',Reseed,0) 然后插入新数据,开始值就会从0开始。这样的结果,就不是我们预期要求的结果了。下面做一个测试:第
2、一种情况:Use testGoSet Nocount OnIf Object_id('test') Is Not null Drop Table testGoCreate Table test(id int Identity(1,1))Insert test Default ValuesInsert test Default ValuesInsert test Default ValuesDelete From testDbcc Checkident ('test',reseed,0)Insert test Default ValuesDbcc Che
3、ckident ('test',noreseed)Select * From test/*检查标识信息: 当前标识值 '3',当前列值 '0'。DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。检查标识信息: 当前标识值 '1',当前列值 '1'。DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。id-----------1*/第2种情况:Use testGoSet Nocount OnIf Object_id('test') Is Not null Drop Table testGoCreate Table
4、 test(id int Identity(1,1))Dbcc Checkident ('test',reseed,0)Insert test Default ValuesDbcc Checkident ('test',noreseed)Select * From test --这里我们会发现开始值是0/*检查标识信息: 当前标识值 'NULL',当前列值 '0'。DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。检查标识信息: 当前标识值 '0',当前列值 '0'。DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系
5、。id-----------0*/ 为了解决这样的开始值为0问题,必须重置标识值为null解决如下: Use testGoSet Nocount OnIf Object_id('test') Is Not null Drop Table testGoCreate Table test(id int Identity(1,1))Declare @null int --借助一个null值的变量来重置表标识值为nullDbcc Checkident ('test',reseed,@null)Insert test Default ValuesDbcc Ch
6、eckident ('test',noreseed)Select * From test/*检查标识信息: 当前标识值 'NULL',当前列值 'NULL'。DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。检查标识信息: 当前标识值 '1',当前列值 '1'。DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。id-----------1*/ 因此,以前写的自动生成清空数据库的SQL语句脚本纠正如下: /*自动生成清空数据库的SQL语句(V2.0)Andy2008-10-8*/Use TestGoDeclare
7、@Sql nvarchar(Max);With T1As( Select Convert(int,0) as LevelNo,fkeyid,rkeyid From sys.sysforeignkeys a Where Not Exists(Select 1 From sys.sysforeignkeys Where rkeyid=a.fkeyid) Union All Select b.LevelNo+1,a.fkeyid,a.rkeyid From sys.sysforeignkeys a,T1 b Wher
8、e a.fkeyid=b.rkeyid) ,T2As