TSQL使用递增主键插入行

时间:2016-04-05 18:15:13

标签: sql-server tsql bulkinsert

我正在尝试将行填充到SQL Server 2008表中,我想知道如何增加主键以查看最大数量然后添加一个。该表不会自动填充/递增PK列。

我将使用values选项插入行,因此需要我可以在那里使用的东西。任何想法/代码将不胜感激。

这是代码和错误;

SET IDENTITY_INSERT tblAnalysisType ON

INSERT INTO [Keystone_KSI] [DBO]。[tblAnalysisType] ([intAnalysisClassID],[vchAnalysisTypeDesc],[numRateAdjustment],[numRepeatAdjustment],[intParentTypeID],[chrRank],[intUpdateUserID],[dteDateUpdated]) VALUES(26,'20 -10-0000-1001',1.00,1.00,NULL,NULL,30,'05 / 04/2016 15:41:00'), (26,'20 -10-0000-1021',1.00,1.00,NULL,NULL,30,'05 / 04/2016 15:41:00'); GO

SET IDENTITY_INSERT tblAnalysisType OFF

Msg 545,Level 16,State 1,Line 3 当IDENTITY_INSERT设置为ON或复制用户插入NOT FOR REPLICATION标识列时,必须为表'tblAnalysisType'中的标识列指定显式值。

3 个答案:

答案 0 :(得分:0)

您可以使用IDENTITY数据类型,也可以使用Sequences为您提供IDENTITY类型功能,并提供更多灵活性和可能性。

答案 1 :(得分:0)

你真的应该使用身份但是

insert into table (pk, col1, col2) 
select max(pk) + 1, 'value1', 'value2' 
from table  

我认为这将涵盖第一行但不确定

insert into table (pk, col1, col2) 
select isnull(max(pk), 0) + 1, 'value1', 'value2' 
from table

答案 2 :(得分:0)

因此。你可以使用身份,但是如果你的桌子上有标识,那么你就赢了。

你必须创建表:

CREATE TABLE MoqSequence
(
   SeqName VARCHAR(512) NOT NULL, SeqValue INT NOT NULL
)

功能:

CREATE FUNCTION ufn_GetSeqValue
(
 @seqName VARCHAR(512)
)
RETURNS INT
AS
BEGIN
 -- Declare the return variable here

 UPDATE MoqSequence
 SET SeqValue = SeqValue + 1
 WHERE SeqName = @seqName;

 DECLARE @value AS INT = (SELECT SeqValue FROM MoqSequence WHERE SeqName = @seqName);

 RETURN @value;

END
GO