如何在sql中编写循环语句以获取一个参数中的值

时间:2013-06-08 12:01:00

标签: sql sql-server loops stored-procedures

我对sql server中的t-sql很新。如何循环选择结果。例如:

Table:
ItemName     Value
XPS_Paid     XPSP001
XPS_UnPaid   XPSUP001   


ALTER PROCEDURE [dbo].[sp_vendor_config]
@PCType nvarchar(50),
@vendor nvarchar(50),
@param nvarchar(50) OUTPUT

AS
BEGIN
IF @PCType= 'XPS'
SELECT @param = p.Value
FROM    Vendors v
JOIN    PConfig p ON v.VendorId = p.Vendor_Id
JOIN    ConfigItems c ON p.ConfigId = c.ConfigId 
WHERE   v.Description = @vendor
AND     ItemName IN ('XPS_Paid', 'XPS_UnPaid')

结果是:
@param = XPSP001

我期待结果:
@param = XPSP001
@param = XPSUP001

类似于:while(@ param.count< 0)获取两个值。但是如何将字符串参数转换为int。以及如何在select语句中编写while语句。需要将这些值传递到C#中的列表框中。

你能给我一些示例代码吗?

3 个答案:

答案 0 :(得分:0)

在您的特定情况下,您可以这样做:

SELECT @param = min(p.Value) + ' ' + max(p.Value)
FROM    Vendors v
JOIN    PConfig p ON v.VendorId = p.Vendor_Id
JOIN    ConfigItems c ON p.ConfigId = c.ConfigId 
WHERE   v.Description = @vendor
AND     ItemName IN ('XPS_Paid', 'XPS_UnPaid')

作为一种更通用的解决方案,您需要在聚合中连接字符串。

答案 1 :(得分:0)

虽然您可以在TSQL中编写循环,但通常不会。 SQL是关于一次操作整组数据的。实际上,您可能希望返回结果表而不是字符串。

但是,这就是你如何做你要求的:

SELECT  @param = p.Value
FROM
( 
 SELECT  p.Value
 FROM    Vendors v
 JOIN    PConfig p ON v.VendorId = p.Vendor_Id
 JOIN    ConfigItems c ON p.ConfigId = c.ConfigId 
 WHERE   v.Description = @vendor
 AND     ItemName IN ('XPS_Paid', 'XPS_UnPaid')
 FOR XML PATH(' ')
) p

答案 2 :(得分:0)

  

需要将这些值传递到C#中的列表框中。

如果你需要获取listbox的值,那么只需:

  • 创建DataTable
  • 的实例
  • 将此DataTable填入您的数据
  • 将此DataTable对象分配给yourlistbox.DataSource

获取数据的SQL查询将是:

SELECT p.Value
FROM    Vendors v
JOIN    PConfig p ON v.VendorId = p.Vendor_Id
JOIN    ConfigItems c ON p.ConfigId = c.ConfigId 
WHERE   v.Description = @vendor
AND     ItemName IN ('XPS_Paid', 'XPS_UnPaid')  

只需将相同的参数(@vendor)添加到SQLCommand

即可

假设检查

  

IF @ PCType ='XPS'

在运行查询

之前,您可以使用C#代码