Tôi có máy chủ SQL Server 2008 (bản dựng 10.0.5500). Đầu tuần này tôi đã chạy cái này trên một cái bàn đã có dữ liệu trong đó :
delete from dbo.table
go
dbcc checkident('dbo.table',reseed,0)
Khi người dùng đã tạo một bản ghi mới sau này, bằng cách nào đó, ID 0 được chèn vào cột ID, thay vì 1 SQL Server thường đặt nếu nhận dạng (1,1) được định cấu hình cho ID.
Điều này gây ra một số vấn đề kỳ lạ, nhưng việc xóa dữ liệu và chạy rese dẫn đến kết quả là 1 được chèn, như mong đợi. Tôi không thể sao chép vấn đề.
Để tham khảo, đây là định dạng chung cho lưu sp của chúng tôi:
alter procedure dbo._TableSave
@pk_id int,
@field varchar(50)
as
if (@pk_id is null)
begin
set nocount on;
insert into dbo.Table
(
Field
)
values
(
@field
);
select scope_identity();
end
else
begin
update dbo.Table
set Field=@field
where PK_ID=@pk_id
select @pk_id
end
Có ai biết điều gì có thể khiến SQL Server chèn 0 vào ID khi đáng lẽ nó phải là 1 không?
Chúng tôi không chèn dữ liệu vào các cột định danh (có nhận dạng bật_insert ) ở bất kỳ đâu trong ứng dụng.
CREATE TABLE dbo.[table] (id int identity(1,1));INSERT INTO dbo.[table] DEFAULT VALUES;DELETE FROM dbo.[table];dbcc checkident('dbo.table',reseed,0);INSERT INTO dbo.[table] OUTPUT inserted.* DEFAULT VALUES;DROP TABLE dbo.[table]