2017-04-18 2 views
0

다른 ID를 가진 레코드 만 삽입 할 수있는 코드를 작성하려고합니다. 동일한 ID가 이미 데이터베이스에 존재하면 레코드를 삽입해서는 안됩니다.이미 존재하지 않는 경우에만 데이터를 데이터베이스에 삽입하십시오.

SqlCommand cmd = new SqlCommand("insert into User(UserId,Name,Profession) values(@UserId,@Name,@Profession) WHERE NOT EXISTS (Select UserId From User where UserId = @UserId)", con); 

그러나 그것은 작동하지 않고 내가 이것을 할 때, 아무것도 데이터베이스에 추가되지됩니다 :

내 SQL 코드는 이것이다. 이 쿼리는 어떻게 수정합니까?

insert into User(UserId,Name,Profession) 
     values(@UserId,@Name,@Profession) 
     WHERE NOT EXISTS (Select UserId From User where UserId = @UserId) 

사용이 쿼리 : 대신

SqlCommand cmd = new SqlCommand("IF NOT EXISTS (Select UserId From User where UserId = @UserId) insert into User(UserId,Name,Profession) values(@UserId,@Name,@Profession) ", con); 
+0

'NOT IN'을 사용해보십시오. 또한 선택시 삽입 할 때 값을 선택해야하므로 값을 제거해야합니다. –

+0

자기가하는 일 모든 경우에 userId의 중복을 방지하지 않습니다. –

답변

2

:

+1

당신이 설명하는 경우, 왜 이것이 정답일까요 :) – swe

2

이 시도, 감사

insert into User(UserId,Name,Profession) 
     select @UserId, @Name, @Profession 
     where not exists (Select UserId From User where UserId = @UserId) 

설명 : AFAIK 삽입 명령은 VALUES 절과 WHERE 절을 결합 할 수 없습니다. 그러나 값을 직접 제공하는 대신 (VALUES 절 사용) 삽입 할 값을 나타내는 SELECT를 정의 할 수 있습니다. SELECT에서 필터, 조인 등을 사용할 수 있습니다. 그래서 필터가 행이 아직 존재하지 않는지 확인하는 필터를 정의 할 수 있습니다. https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql

또는 사용 CTE :

+0

감사합니다. – User001122

+0

환영합니다. :) –

1

을 경우 사용자에 사용자 아이디가 = @UserId 삽입 (사용자 아이디, 이름, 직업) 값 (@ UserId, @ Name, @ Profession) 이 SQL 서버용으로 작동합니다.

관련 문제