Msg 2627,在使用IDENT_CURRENT()时发生

时间:2013-12-12 21:37:16

标签: sql sql-server-2012

DDL:

CREATE TABLE OSOBA
(
    id INT PRIMARY KEY not null IDENTITY,
    imie VARCHAR(30) not null,
    nazwisko VARCHAR(40) not null,
    zawod VARCHAR(30) not null,
    dataUrodzenia DATE,
    plec BIT not null,
    narodowosc VARCHAR(30) not null,
);

CREATE TABLE OSOBISTOSCI
(
    nazwaMiasta VARCHAR(30) not null,
    id INT not null,
    adres VARCHAR(50),
    czy BIT,
    PRIMARY KEY (id),
    FOREIGN KEY (id) REFERENCES OSOBA,
    FOREIGN KEY (nazwaMiasta) REFERENCES MIASTA,
);

CREATE TABLE ARCHITEKCI
(
    id INT not null,
    uprawnienia VARCHAR(30) UNIQUE,
    styl VARCHAR(30) not null,
    liczba INT not null,
    PRIMARY KEY (id),
    FOREIGN KEY (id) REFERENCES OSOBA,
); 

我有这些插入语句:

-- these work fine
INSERT INTO OSOBA (imie,nazwisko,zawod,dataUrodzenia,plec,narodowosc) VALUES ('Lech', 'Wałęsa', 'Elektryk', '19430129', 1, 'Polak');
INSERT INTO OSOBISTOSCI (nazwaMiasta, id, adres, czy) VALUES ('Gdańsk', IDENT_CURRENT('OSOBA'), 'ul. Polanki', 0);

-- these throw the below error message
INSERT INTO OSOBA (imie,nazwisko,zawod,dataUrodzenia,plec,narodowosc) VALUES ('Marcia','Frank','Architekt','19570720','0','Niemiec');
INSERT INTO ARCHITEKCI (id,styl,liczba) VALUES (IDENT_CURRENT('OSOBA'),'Nowoczesny',8);

错误:

  

Ms 2627,Level 14,State 1,Line 124
  违反UNIQUE KEY约束'UQ_ ARCHITEK _982D973E2BA18BE7'。无法在对象'dbo.ARCHITEKCI'中插入重复键。重复键值为()。

1 个答案:

答案 0 :(得分:2)

Aaron提到IDENT_CURRENT不太可靠。最好使用OUTPUT子句。请参阅以下示例:

DECLARE @LatestID TABLE (ID INT);
INSERT INTO #OSOBA (imie,nazwisko,zawod,dataUrodzenia,plec,narodowosc) 
OUTPUT INSERTED.ID INTO @LatestID
VALUES ('Marcia','Frank','Architekt','19570720','0','Niemiec');

INSERT INTO #ARCHITEKCI (id,styl,liczba) VALUES ((SELECT ID FROM @LatestID),'Nowoczesny',8);