【发布时间】:2012-01-18 10:43:19
【问题描述】:
我在 sql 中有如下查询:
SELECT
a1
FROM
dbo.myProductNames
WHERE
keycode = 40 OR keycode = 28 OR keycode = 32 OR keycode = 50
a1 = 名称
我需要表格中的信息以按我要求的顺序输出其查询的名称,所以我需要先是 40,然后是 28,依此类推。
原因是我的代码读取结果并存储在一个数组中,然后用于在表单上显示。
SQL查询来自的表的信息以num顺序存储,因此将首先读取28等。
正如我所说,我需要按照在 where 子句中输入的顺序获取信息。
尽管我从未尝试过嵌套选择,但我正在考虑与嵌套 Select 语句有关。
或者,有没有简单的方法?
任何帮助都会很棒!
非常感谢!
更新:
好的,谢谢你们!
SqlCommand pgNameFill = new SqlCommand("SELECT a1, CASE keycode WHEN @pg1 THEN 1 WHEN @pg2 THEN 2 WHEN @pg3 THEN 3 WHEN @pg4 THEN 4 END AS SortOrder FROM dbo.myProductNames WHERE keycode IN (@pg1, @pg2, @pg3, @pg4) ORDER BY SortOrder ASC", conny1);
pgNameFill.Parameters.AddWithValue("@pg1", pg1);
pgNameFill.Parameters.AddWithValue("@pg2", pg2);
pgNameFill.Parameters.AddWithValue("@pg3", pg3);
pgNameFill.Parameters.AddWithValue("@pg4", pg4);
SqlDataReader readpg = pgNameFill.ExecuteReader();
非常感谢所有的帖子!我希望我可以标记更多的答案,而不仅仅是一个,哦,大家都赞成!
【问题讨论】:
-
顺便说一句,您也可以使用 WHERE keycode IN(40,28,32,50) 并且您似乎正在寻找某种 ORDER BY ?
-
根据您制作的几个 cmets,您声明这将是参数化的。是不是你有固定数量的整数参数?或者您是否需要一个接受“任意数量”参数并仍保持顺序的解决方案?那么,它会是动态 sql(构建一个要执行的 sql 字符串,并在该字符串中引用参数),还是一个存储过程?另外,这适用于哪个版本的 SQL?
-
啊,是的,它总是 4 个参数,我在 2008 服务器上使用 MSSQL。我将在 c# 中附加到我的代码的字符串中使用选择
-
@Steven Smith:在您的 SqlCommand 中,
WHEN pg4 THEN 4应该是WHEN @pg4 THEN 4。 -
另见此相关(但更新)question。
标签: sql