2013-02-05 196 views
0

我正在寫一個C#應用程序與SQL Server CE接口,但我遇到了CE的許多限制之一。我的數據庫有表CustomerListCustomerList。客戶可以訂閱許多列表,列表中可以有許多客戶 - 因此我將客戶列表表格作爲聯結表(列爲CustomerListIdCustomerIdListId - 就這些了)。subquerying在SQL Server CE

該設計是我們有一個主列表,將永遠列出每個客戶。

因此,在我的代碼中,我正在編寫一個函數,將所有列出的客戶設置爲訂閱主列表。這是我很簡單的SQL查詢:

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

此查詢沒有在SQL Server CE的工作,我絞盡腦汁試圖找到不涉及一個痛苦的一種替代的for-each行由行代碼。任何想法將不勝感激。

回答

1

爲什麼不直接使用:

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

我缺少的東西?

祝你好運。

+0

也許我還不夠清楚。所有客戶都需要插入到名爲'Master'的特定列表中。這個列表是通過名稱來識別的,而不是ID(我知道這並不完美,但我寫了代碼以確保不會有重複)。因此,我需要一個插入特定「主」列表的查詢。 –

+0

仍然困惑 - 你有一個名爲主名單(ID 1我假設)。那麼上面的內容會將每個客戶的單個記錄插入到該客戶列表表中。 – sgeddes

+0

否主列表的ID未知。然而,只會有一個主列表,我的C#代碼可以確保這一點。 –

0

我想出了一個解決方案。

我首先完成了一個C#cmd,它獲取主列表的ID。

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注入不是一個問題。

(對不起,我是新來的^^)