2010-06-02 4 views
0

이 내 삽입 성명 나는 테이블 ProductStore에 삽입하려고SQL 삽입 오류

INSERT INTO ProductStore (ProductID, StoreID, CreatedOn) 
(SELECT DISTINCT(ProductId), 1, GETDATE() FROM ProductCategory 
WHERE EXISTS (SELECT StoreID, EntityID FROM EntityStore 
WHERE EntityType = 'Category' AND ProductCategory.CategoryID = EntityStore.EntityID AND StoreID = 1)) 

이며, 1 열을 StoreID를 저장하기 위해 매핑되는 카테고리에 매핑되는 모든 제품은 할 수 확실히 하나 이상을 가지고 동일한 항목이있는 행. 그리고 다음과 같은 오류가 점점 오전 : 기본 키 제약 조건의 위반 ...

을하지만, 다음 쿼리 작업을 수행합니다

INSERT INTO ProductStore (ProductID, StoreID, CreatedOn) 
VALUES (2293,1,GETDATE()),(2294,1,GETDATE()) 

를 그래서 분명히이 제품 ID 열보다 동일한 하나를 삽입하려고 일단.

내 검색어에 문제가있는 것을 볼 수 있습니까? TIA

답변

1

이미 테이블에있는 레코드를 제외하는 쿼리의 일부가 표시되지 않습니다.

+0

그 것이 었습니다 !! 감사:) – user228058

0

select distinct productid

은 기본 키 제약 조건을 위반 한 기존의 ID 및 그를 선택하는 것입니다. 신원 증분을 사용하여 기본 키를 생성하지 않는 이유는 무엇입니까? 이 경우 ID 자체에 대해 걱정할 필요가 없으며 생성됩니다.

1

INSERT INTO 문을 꺼내서 SELECT을 실행하면 중복 된 부분을 매우 빠르게 찾을 수 있습니다.

내 생각 엔 당신에 대해 약간 오해 것이다 SELECT DISTINCT이 실제로 무엇을, 당신은 ProductId 주위에 괄호를 가지고 있다는 사실에 의해 입증. SELECT DISTINCT은 선택 목록의 모든 열이 인 경우에만 중복 제거를 보장합니다. 이 경우 각 ProductId에 대해 하나의 행만 확보된다고 보장 할 수는 없습니다.

+0

그래서 각 제품 ID에 대해 1 행을 얻을 수 있습니까? 나는 select로 작업 한 group by을 시도했지만 여전히 동일한 오류가 발생했습니다 – user228058