-2

我对 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# 中的列表框中。

你能给我示例代码吗?

4

3 回答 3

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')

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

于 2013-06-08T12:08:11.100 回答
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
于 2013-06-08T12:10:29.457 回答
0

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

如果您需要获取列表框的值,那么只需:

  • 创建一个实例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

假设检查

如果@PCType='XPS'

您可以在运行查询之前在 C# 代码中执行

于 2013-06-08T12:52:53.867 回答