我有一個UserID列表和一個到SQL Server的開放連接。如何循環訪問此列表並選擇與First_Name和Last_Name列匹配的UserID?我假設輸出可以在數據表中?使用C#從SQL數據庫中選擇表
千恩萬謝
我有一個UserID列表和一個到SQL Server的開放連接。如何循環訪問此列表並選擇與First_Name和Last_Name列匹配的UserID?我假設輸出可以在數據表中?使用C#從SQL數據庫中選擇表
千恩萬謝
這篇文章應該可以幫助您:http://msdn.microsoft.com/en-us/library/aa496058%28SQL.80%29.aspx
我用這個在過去創建一個存儲過程接受一個逗號分隔的VARCHAR參數。 我的來自C#程序的源代碼是一個檢查列表框,並且我使用foreach循環和一個StringBuilder構建逗號分隔的字符串來進行連接。可能有更好的方法,具體取決於列表中的項目數量。
回到SQL部分,文章中討論的fn_Split函數使您能夠將逗號分隔的字符串轉換回SQL Server可以理解的表變量...以及您可以在存儲過程中查詢哪些變量。
下面是一個例子:
CREATE PROCEDURE GetSelectedItems
(
@SelectedItemsID Varchar(MAX) -- comma-separated string containing the items to select
)
AS
SELECT * FROM Items
WHERE ItemID IN (SELECT Value FROM dbo.fn_Split(@SelectedItemsIDs,','))
RETURN
GO
注意,你也可以使用內部聯接,而不是IN()如果你喜歡。
如果沒有fn_Split UDF在SQL Server上,你可以在這裏找到:http://odetocode.com/Articles/365.aspx
我希望這有助於。
我已經完成了所有這些已經戴夫,謝謝。我在問如何使用列表中的值從SQL表中選擇。 – Josh 2010-08-11 02:32:17
@Josh給出的鏈接討論通過C#運行SQL查詢,但他們還討論了建立連接所需的步驟。 @OMG Ponies提供您需要運行的查詢,並且我提供的鏈接應該很好。提示:查看提及SqlCommand的鏈接(http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand。aspx) – 2010-08-11 02:36:38
從OMG下面的信息(謝謝你)我不知道如何實現。它看起來像直接SQL,我不知道「你」是什麼。我希望看到某種循環將列表中的值與SQL表進行比較,並選擇適當的列值並將其輸出到數據表。 – Josh 2010-08-11 02:45:32
這樣做將是最方便的方法:
供應是CSV串入IN子句,像:
SELECT u.first_name,
u.last_name
FROM USER_TABLE u
WHERE u.userid IN ([comma separated list of userids])
否則,你可能值插入到一個臨時表,並加入到用戶表:
SELECT u.first_name,
u.last_name
FROM USER_TABLE u
JOIN #userlist ul ON ul.userid = u.userid
在你的SQL數據庫中寫一個名爲ParseIntegerArray的函數。這應該將逗號分隔的字符串轉換爲ID表,然後可以在查詢中加入到此表中。這也有助於避免您通過連接字符串來構建SQL所能獲得的任何SQL注入風險。在使用LINQ to SQL或LINQ to Entities時,您也可以使用此函數。
DECLARE @itemIds nvarchar(max)
SET itemIds = '1,2,3'
SELECT
i.*
FROM
dbo.Item AS i
INNER JOIN dbo.ParseIntegerArray(@itemIds) AS id ON i.ItemId = id.Id
我正在使用SQL Server 2005 – Josh 2010-08-11 02:29:24