我对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#中的列表框中。
你能给我一些示例代码吗?
答案 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#代码