2016-09-23 45 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

相關問題