2013-02-05 197 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注入不是一个问题。

(对不起,我是新来的^^)