日期:2014-05-17  浏览次数:20563 次

帮忙看看这个语句
请看下面的首两行,是从表 TblProductionOrders删除什么东西吧?下一句的DBCC CHECKIDENT看不懂,请大神解释一下。

DELETE TblProductionOrders
DBCC CHECKIDENT('TblProductionOrders',RESEED,1)

INSERT INTO TblProductionOrders
(PartNumber
,ProductionOrder
,Qty
,StartTime)

SELECT PartNumber
,ProductionOrder
,COUNT(DISTINCT SerialNumber)
,MIN(TestDateTime) 
FROM TblTestData
GROUP BY PartNumber,ProductionOrder

------解决方案--------------------
這句是將表 TblProductionOrders 的遞增種子設置為1,也就是 identity 下次的值就是 2 (1+1)。
DBCC CHECKIDENT('TblProductionOrders',RESEED,1)

------解决方案--------------------
table_name
是要对其当前标识值进行检查的表名。 指定的表必须包含标识列。 表名必须符合标识符规则。
NORESEED
指定不应更改当前标识值。
RESEED
指定应该更改当前标识值。

http://msdn.microsoft.com/zh-cn/library/ms176057.aspx
------解决方案--------------------
引用:
那么第一行的 DELETE TblProductionOrders 岂不是什么用都没有?

当然有用了,delete删除的表种子值是不会变动的,如果你自增列插入了12345
然后delete清空了一个表,那么再继续插入值是从6开始的
通过用DBCC CHECKIDENT将种子置为1,delete后的表再插入数据时是从2开始的
其实可以用truncate table tablename,清空表数据的同时会将种子置为0
也就是再插入时是从1开始的
------解决方案--------------------
不知道你的代码是不是要重置种子的意思
TRUNCATE TABLE TblProductionOrders等价于

DELETE TblProductionOrders
DBCC CHECKIDENT('TblProductionOrders',RESEED,0)
而你上面种子没有置0,而是置为了1,插入新数据时是从2开始的