我在SQL Server 2008版本中进行了一些初始开发,并且因为它是测试脚本,所以我在事务中使用脚本查询来实际上不影响数据库表。为什么在SQL Server中回滚转换增加种子值
但似乎记录没有输入数据库,但每次执行脚本时种子值都会增加。
T-SQL脚本:
Begin Tran
DECLARE @hdoc int
DECLARE @doc VARCHAR(MAX)
SET @doc =
'<?xml version="1.0" encoding="UTF-8"?>
<root>
<places>
<Row>
<Field_0>53.570438</Field_0>
<Field_1>-113.390992</Field_1>
<Field_2>Address details 1</Field_2>
<Field_3>Lab 1</Field_3>
</Row>
<Row>
<Field_0>53.542062</Field_0>
<Field_1>-113.528646</Field_1>
<Field_2>Address details 2</Field_2>
<Field_3>Lab 2</Field_3>
</Row>
</places>
</root>'
EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc
INSERT INTO dbo.Laboratories
(Name, Latitude, Longitude, [Image], ContentDetails, CreatedDate, CreatedBy, UpdatedDate, UpdatedBy)
SELECT ROW_NUMBER() OVER (ORDER BY Name)
, cast(Latitude as decimal(11,8)), cast(Longitude as decimal(11,8)), null, Content, GETDATE(), 1, null, null
FROM OPENXML (@hdoc, '/root/places/Row', 2)
WITH (
Name nvarchar(100) 'Field_3'
,Latitude varchar(20) 'Field_0'
,Longitude varchar(18) 'Field_1'
,Content nvarchar(100) 'Field_2'
)
EXEC sp_xml_removedocument @hdoc
select * from dbo.Laboratories
rollback tran
我有以下脚本来识别当前种子值
SELECT
IDENT_SEED(TABLE_NAME) AS Seed,
IDENT_INCR(TABLE_NAME) AS Increment,
IDENT_CURRENT(TABLE_NAME) AS Current_Identity,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE OBJECTPROPERTY(OBJECT_ID(TABLE_NAME), 'TableHasIdentity') = 1
AND TABLE_TYPE = 'BASE TABLE'
这是从here
引用的基本问题是
- 即使在转换回滚时,它为什么会增加标识值?
- 如何解决这个问题,从下次不会影响事务未提交时的种子值?
PS:我可以重新认证这个身份,我知道这件事。
可能的重复[为什么我的IDENTITY列值存在差距?](http://stackoverflow.com/questions/14642013/why-are-there-gaps-in-my-identity-column-values) – Pondlife
不,它看起来不一样,我有交易的地方,我认为事务回滚时什么都不应该受到影响.. –
然后你的问题可能是[这一个]的副本(http://stackoverflow.com/questions/) 282451/sql-identity-autonumber-is-increment-even-with-a-transaction-rollback) – Pondlife