我有一个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