我正在尝试将行填充到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
Msg 545,Level 16,State 1,Line 3 当IDENTITY_INSERT设置为ON或复制用户插入NOT FOR REPLICATION标识列时,必须为表'tblAnalysisType'中的标识列指定显式值。
答案 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