2010-05-25 1 views
0

내가이 그냥 추측Probleme는

INSERT INTO FR_METIERPUBLI(
D_NIDMTR, 
D_NIDPUBLI 
) 
VALUES (
'SELECT MAX(D_NIDMTR) FROM FR_METIERPUBLI + 1', 1000 

내가 데이터베이스를 모른 채 내 ID

+1

작은 따옴표를 삭제하십시오. 그리고 사용중인 SQL 데이터베이스 (MySQL)를 알려주십시오. SQL 서버? 포스트그레스? 신탁? – Oded

+1

특히 중복 데이터베이스 ID로 인해 여러 클라이언트가 데이터베이스에 동시에 액세스 할 수있는 경우 이처럼 기본 키를 할당하면 안됩니다. 대부분의 DB 시스템은 사용자가 사용해야하는 시퀀스 또는 자동 증가 필드를 제공합니다. – RoToRa

답변

1

은 적어도 중복 당신이 할 수

(SQL에 서버를 얻을 것이다 .. 그러나 ..if이 작업에 매우 조심

INSERT INTO FR_METIERPUBLI(
D_NIDMTR, 
D_NIDPUBLI) 
SELECT MAX(D_NIDMTR) +1, 1000 FROM FR_METIERPUBLI 

시도 동시에이 작업을 수행) 트랜잭션에서 랩하고 이러한 잠금을 지정하십시오.

INSERT INTO FR_METIERPUBLI(
    D_NIDMTR, 
    D_NIDPUBLI) 
    SELECT MAX(D_NIDMTR) +1, 1000 FROM FR_METIERPUBLI with (UPDLOCK, HOLDLOCK) 

왜 시퀀스 또는 ID를 사용하지 않습니까?

+0

@Mercer 특히이 부분에주의하십시오. 왜 시퀀스 또는 ID를 사용하지 않습니까? – HLGEM

+0

@HLGEM 사용 방법.? – Mercer

+0

사용중인 onteh 데이터베이스에 따라 다릅니다. 이것은 데이터베이스와 관련된 것들이지만, 대부분의 데이터베이스는 자동으로 어떤 종류의 id 필드를 증가시킵니다. – HLGEM

1

을 증가하려는 오류를 가지고 있지만,이 시도 :

INSERT INTO FR_METIERPUBLI 
     (D_NIDMTR,D_NIDPUBLI) 
    SELECT 
     ISNULL(MAX(D_NIDMTR),0)+ 1, 1000 
     FROM FR_METIERPUBLI 
:
INSERT INTO FR_METIERPUBLI 
     (D_NIDMTR,D_NIDPUBLI) 
    SELECT 
     MAX(D_NIDMTR)+ 1, 1000 
     FROM FR_METIERPUBLI 

SQL Server에 대해,이를 이용하여 기존의 어떤 행에 대한 보호 노력

+0

게시 해 주셔서 감사합니다. 나는 내 자신을 바보로 만들려고했다. –