0

根据选定的主键从数据库中获取记录的最佳方法是什么?

我能够从网格视图中获取选定(选中)行的主键,现在需要从数据库中检索这些选定复合主键的相应记录。

如果这些行只使用一个主键,那就更容易了。我可以只连接主键(逗号分隔)并在 WHERE IN 子句中使用它。但是这些行使用三个主键(int、int、string)

我正在考虑使用 SELECT JOIN(每组主键选择一个,然后加入所有选择),但我不确定这是否是最优化的方法。

处理这个问题的最佳方法是什么?

提前致谢。

尼基

[更新] - 无法回复个别评论,我可能还没有足够的权限,所以会在此处更新帖子以明确。

这是我正在做的一个例子:

来自一个具有复合键的数据库表的数据:

TABLE1
KeyCol1 INT (Primary Key),
KeyCol2 STRING (Primary Key),
KeyCol3 INT (Primary Key),
Col4    Decimal,
Col5    STRING,
Other columns . . .

带有网格视图 1 的第 1 页:

Sel |KeyCol1 |KeyCol2 |KeyCol3 |Col4  |Col5          |Other Columns . . .
[ ] |100     |CODE1   |01      |10.05 |Description 1 |. . .
[/] |100     |CODE1   |02      | 5.03 |Description 2 |. . .
[ ] |100     |CODE2   |01      |12.45 |Description 4 |. . .
[/] |102     |CODE1   |01      |21.50 |Description 1 |. . .
[/] |102     |CODE2   |01      | 9.10 |Description 5 |. . .
[/] |102     |CODE3   |03      | 7.15 |Description 1 |. . .

. . . (其中 Sel 列是一个复选框,并且 [/] 被选中)

然后在第 1 页上单击一个按钮(例如“取消记录”)后,我需要获取这些行,以显示到另一个页面,如下所示:

第 2 页,带有 GridView 2

KeyCol1 |KeyCol2 |KeyCol3 |Col4  |Other Colums  |Reason
100     |CODE1   |02      | 5.03 |. . .         |_______
102     |CODE1   |01      |21.50 |. . .         |_______
102     |CODE2   |01      | 9.10 |. . .         |_______
102     |CODE3   |03      | 7.15 |. . .         |_______

(其中原因列是一个文本框)

4

1 回答 1

1

您可以在单个查询中执行此操作,方法是为每个三个 id 添加一个 OR 子句(即,为您的 gridview 中的每个选定行)。例如:

从 Table1 中选择任何内容 WHERE (KeyCol1=val1-1 AND KeyCol2=val1-2 AND KeyCol3=val1-3) OR (KeyCol1=val2-1 AND KeyCol2=val2-2 AND KeyCol3=val2-3) OR .. etc

于 2012-06-20T08:34:43.740 回答