2016-09-23 42 views
0

我有简单的SQL查询:C#获取从选择查询第二个值插入到另一

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

那么你为什么不使用连接或子查询 –

+0

为什么你在temp2中使用'Convert.ToInt32'?而你说tmp2可以是空的! –

+0

@Sunil阅读Convert.Toint32和int.parse之间的差异 –

回答

1

您可能可以按照您的建议进行操作,但只需在SQL中编写查询并执行该操作就可以轻松很多。

SELECT val FROM ExampleTable WHERE id in (SELECT val2 FROM ExampleTable2 WHERE val = @val) 

有些组合我不能完全告诉你要怎么做,但它是类似的东西。

这种方法将通过在服务器上执行所有操作而获益,而不是将数据的负载拖回到第四步。根据您的数据库和连接设置,它也更可能是正确的,因为它可以作为数据的一致快照运行,而不是两次独立调用。

+0

这是有效的。谢谢。 – fanarek