在SQL Server CE中进行子查询

时间:2013-02-05 13:35:26

标签: c# sql sql-server-ce

我正在编写一个与SQL Server CE接口的C#应用​​程序,但我遇到了CE的许多限制之一。

我的数据库包含表格CustomerListCustomerList。客户可以订阅许多列表,列表可以有很多客户 - 所以我将customerlist表作为联结表(列CustomerListIdCustomerIdListId - 这些全部)。

设计是我们有一个主列表,其中列出了每个客户。

因此,在我的代码中,我正在编写一个函数,将所有列出的客户设置为订阅主列表。这是我非常简单的SQL查询:

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

这个查询在SQL Server CE中不起作用,我绞尽脑汁试图找到一个不涉及每个逐行代码的痛苦的替代方案。任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:1)

为什么不使用:

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

我错过了什么吗?

祝你好运。

答案 1 :(得分: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注入不是一个问题。

(抱歉这个简单的问题/答案,但我是新来的^^)