如何在SQL Server中允许null Auto_Increment主键

时间:2015-11-25 02:13:49

标签: sql-server primary-key

enter image description here

midx列是使用自动增量(identity 1,1)的主键。

当我尝试使用此查询插入数据时,这是一个问题:

Insert into coordinfo(mdate, X, Y, lat, lon) 
values (GETDATE(), 12344, 334, 34.775, 123.554);

我想在不输入主键的情况下自动增加midx

谢谢!

2 个答案:

答案 0 :(得分:1)

通常,主键列不能为null,因为它必须是表上的聚簇索引。

为了获得您想要的效果,您应该创建一个带有非空标识列的keys表。

如果您的表定义如下,使用插入触发器,您的插入DML将为midx生成一个自动生成的值:

CREATE TABLE keyTable 
(
    [key] int identity(1,1) primary key not null,
    date datetime
)

CREATE TRIGGER myTable_increment_midx ON myTable 
after INSERT 
AS 
BEGIN
    DECLARE @key int 
    INSERT INTO keyTable (date) values (getdate())
    SET @key = @@IDENTITY

    UPDATE t 
    set t.midx = @key
    FROM mytable t join INSERTED i on i.mdate = t.mdate and ...
END

CREATE TABLE myTable
(
     mdate DATETIME,
     udate DATETIME,
     midx  INT PRIMARY KEY NULL,  --again, you shouldn't be allowed to do this
     X     INT,
     Y     INT, 
     lat   DECIMAL(9, 6),
     lon   DECIMAL(9, 6) 
)

答案 1 :(得分:0)

您可以使用竞争列:

ALTER TABLE coordinfo ADD midx AS idx*100