2013-02-05 2 views
0

SQL Server CE와 인터페이스하는 C# 응용 프로그램을 작성하고 있지만 CE에있는 여러 가지 제한 사항 중 하나가 발생했습니다.SQL Server CE의 하위 쿼리

데이터베이스 테이블 Customer, ListCustomerList이 있습니다. 고객은 많은 목록에 등록 할 수 있으며 목록에는 많은 고객이있을 수 있습니다. 따라서 고객 테이블을 접합 테이블로 사용할 수 있습니다 (열은 CustomerListId, CustomerId, ListId).

우리는 항상 모든 고객을 나열 할 수있는 마스터 목록을 가지고 있습니다.

그래서 내 코드에서 나열된 모든 고객을 마스터 목록에 등록하도록 설정하고 있습니다. 이것은 나의 아주 간단한 SQL 쿼리입니다 :

insert into customerlist (CustomerId, ListId) 
values (
(select customerid from customer), 
(select 1 from list where ShortDesc='Master')) 

이 쿼리는 SQL 서버 CE에서 작동하지 않습니다와 나는 고통을 수반하지 않는 대안을 찾기 위해 노력하고 내 머리를 고문하고를위한 각 행 단위 코드 . 어떤 아이디어라도 크게 감사 할 것입니다.

답변

1

은 왜 그냥 사용

INSERT INTO customerlist (CustomerId, ListId) 
SELECT customerid,1 FROM customer 

이 나는 ​​뭔가를 놓치고 있습니까?

행운을 빈다.

+0

아마도 나는 충분히 명확하지 않았습니다. 모든 고객은 'Master'라는 특정 목록에 삽입해야합니다. 이 목록은 ID가 아닌 이름으로 식별됩니다 (이 것은 완벽하지는 않지만 중복이 없도록 코드를 작성했습니다). 따라서 특정 '마스터'목록에 삽입하는 쿼리가 필요합니다. –

+0

여전히 혼란 스럽습니다. Master라는 이름의 목록이 있습니다 (ID 1은 내가 추정합니다). 그런 다음 위의 코드는 각 고객에 대한 단일 레코드를 해당 ID가있는 customerlist 테이블에 삽입합니다. – sgeddes

+0

마스터 목록의 ID를 알 수 없습니다. 그러나 단 하나의 마스터 목록이있을 것이고, C# 코드가이를 확인합니다. –

0

나는 해결책을 내놓았다.

먼저 마스터 목록의 ID를 가져 오는 C# cmd를 완료했습니다.

string sqlGetId = "select listid from list where ShortDesc='Master'"; 
SqlCeCommand cmdGetMasterId = new SqlCeCommand(sqlGetId, DbConnection.ceConnection); 
int key = (int)cmdGetMasterId.ExecuteScalar(); 

가 그럼 난 간단한 두 번째 쿼리에서 해당 키를 사용 :

sql2 = "insert into customerlist (CustomerId, ListId) select customerid, " + key + " from customer"; 
cmd2 = new SqlCeCommand(sql2, DbConnection.ceConnection); 
cmd2.ExecuteNonQuery(); 

내가 SQL 매개 변수로 명령을 추가하는 것은 합치 것보다 항상 더 나은 것을 깨닫게 - 때문에이 응용 프로그램의 범위에 있지만,을, SQL 주입 걱정할 필요가 없다.

(간단한 질문/답변을 드려 죄송합니다. ^^).

관련 문제