대괄호 삽입, 레코드 존재 확인

c# dapper

문제

그래서 내 데이터베이스에 레코드를 삽입하려면이 메서드를 사용하고 있습니다 :

TransactionBlock.Connection.Execute(
                            "INSERT Table(Item,Id)VALUES(@Item, @Id);
                            new {Item,Id = id }, TransactionBlock.Transaction);

이제 Item / id가 이미 데이터베이스에 있는지 확인하기 위해 다음을 사용하여이를 수정해야합니다.

const sql = "IF EXISTS (SELECT * FROM 테이블, Item = @ Item ... 등)

그러나 이것을 달성하는 방법에 대한 예를 발견하지 못했습니다. 저장 프로 시저를 만들어이 작업을 수행 할 수 있지만이 방법을 사용하여 수행하려고합니다.

수락 된 답변

SQL Server를 사용 중이며 찾고있는 SQL이없는 경우에만 레코드를 삽입하려고한다고 가정합니다.

IF NOT EXISTS (SELECT * FROM Table WHERE Id = @Id) 
    INSERT INTO Table(Item, Id) VALUES(@Item, @Id)

인기 답변

INSERT INTO TableName (Item, ID)
SELECT @Item, @Id WHERE NOT EXISTS ( SELECT 1 FROM TableName WHERE Id=@Id )

그것은 하나의 성명서로 효과가 있습니다.

주목할 가치가있는 것은 기본 DBMS에 따라 여전히 경합이있을 수 있다는 것입니다. 잠금이없고 많은 삽입이 동시에 발생하면 select를 실행할 때 레코드가 존재하지 않지만 이전에 레코드가 존재하지 않는 상태가 될 수 있습니다 삽입을 시도합니다.

삽입물이 빠르게 발생하는 상황에 대처하려면 다음 내용을 숙지하는 것이 좋습니다.

http://weblogs.sqlteam.com/dang/archive/2009/01/31/UPSERT-Race-Condition-With-MERGE.aspx

행운을 빕니다!



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.