Мы хотели установить начальное значение идентификатора с помощью
DBCC CHECKIDENT ('myTable', RESEED, 0)
, но у нас сложилось впечатление, что учетная запись службы, которая выполняет этот код, должна бытьназначена роль db_ddladmin, чтобы иметь возможность сделать это.Это правда?Если это так, то для нас это не разрешено из-за политики.
Если это так, я рассмотрел эту альтернативу:
--Create a test table
/****** Object: Table [dbo].[People2] Script Date: 03/22/2012 19:07:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[People2](
[PersonId] [int] IDENTITY(1,1) NOT NULL,
[LastName] [varchar](50) NOT NULL,
[FirstName] [varchar](50) NOT NULL,
CONSTRAINT [PK_People2] PRIMARY KEY CLUSTERED
(
[PersonId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
---Proof of concept
declare @seed int = 1000 --Set the seed
SET IDENTITY_INSERT People2 ON
--Insert a dummy record to increment the identity counter to 1 less than the value that we really want
Insert into people2
(PersonId, LastName,FirstName)
values
(@seed-1, 'temp','dummy')
SET IDENTITY_INSERT People2 OFF
--Delete the record that we just inserted (for no otehr purpose than setting the seed)
delete from People2 where personid = @seed-1
--Do your normal code to populate the People2 dest table
Insert into people2
(LastName,FirstName)
values
('Jones','John')
--Verify that the seed was set to the value we wanted
select * from People2
Другие соображения включают вставку во временную таблицукоторый мы создаем с использованием динамического SQL, который содержит начальное значение идентификатора, взятое из переменной.
Менее привлекательным подходом было бы перелистывать записи и увеличивать ID вручную, а не автоматически столбцом.
Таблицы подсчета возможны, но меня смущают.
Предложения?