我有简单的SQL查询:
SELECT val FROM ExampleTable WHERE id in (1,2,3)
获取val值我正在使用
using(SqlCommand cmd = new SqlCommand(query,conn))
{
var tmp = Convert.ToInt32(cmd.ExecuteScalar());
}
问题是,此查询返回(当然)超过1行。 我需要这个值来将它用作另一个sql查询的参数,如:
SELECT val2 FROM ExampleTable2 WHERE val = @val
using(SqlCommand cmd2 = new SqlCommand(query2,conn))
{
cmd2.Parameters.AddWithValue("@val",tmp);
var tmp2 = Convert.ToInt32(cmd2.ExecuteScalar());
}
这个只获得tmp的第一个值。我想检查所有这些,我的意思是如果第二个查询返回null,则将tmp
的下一个值作为参数。
当第一个查询返回多行时,第二个可能返回null。这是一个问题,因为我在另一个SQL查询中使用tmp2
值。有什么想法吗?
答案 0 :(得分:1)
您可能会以您的建议方式执行此操作,但只需在SQL中编写查询并执行该操作即可。
的某种组合
SELECT val FROM ExampleTable WHERE id in (SELECT val2 FROM ExampleTable2 WHERE val = @val)
我无法告诉你他们想要做什么,但事情就是这样。
这种方法可以通过在服务器上执行所有内容而不是拖回大量数据来提高性能。向前。根据您的数据库和连接设置,它也更可能是正确的,因为它可以作为数据的一致快照运行,而不是两个独立的调用。