我有一个产品表和一个变量表作为休闲
Product Table:
productId product_Name Product_Price Product_Brand
==================================================
1 Product 200 Brand
Variant Table:
variantID ProductId Variant_Name
================================
1 1 Black
2 1 Blue
3 2 white
我必须在变量的结果中列出产品,但每个产品都有4-5变体,如果我制作视图,那么由于多种变体,它会提供大量重复数据。
我希望变量字符串为
Black,Blue,white
为此我将一个商店程序写为休闲
create PROCEDURE [dbo].[get_Variant_String]
(@product Id int, @Char char)
AS
BEGIN
CREATE TABLE #tmp
(
varient varchar(100)
)
inset into #tmp
select Variant_Name form Variant where productID=@ProductId
DECLARE @VarientString varchar(100)
set @VarientString=''
DECLARE @Temp_Varient varchar(100)
DECLARE Cur_Variant CURSOR for select varient from #tmp
OPEN Cur_Variant
WHILE 1 =1
BEGIN
FETCH NEXT FROM Cur_Variant
INTO @Temp_Varient
IF @@FETCH_STATUS <> 0
BREAK
IF @VarientString=''
BEGIN
SET @VarientString=@Temp_Varient
END
ELSE
BEGIN
SET @VarientString=@VarientString + @Char +@Temp_Varient
END
END
CLOSE Cur_Variant
DEALLOCATE Cur_Variant
SELECT @VarientString
END
根据需要提供输出
现在我有一个商店程序来选择产品以选择产品。我在其中编写了选择查询以从产品表中选择产品。在此查询中,我想在产品变体的select语句中调用上面的存储过程并减少no或iteration 我已将select查询编写为fallow:
select productId,product_Name,Product_Price,Product_Brand,(exec get_Variant_String product.productid,',' ) as variant
from product
但是它给出了错误
请告诉我如何获得输出(对于每个产品)
productId product_Name Product_Price Product_Brand Variant
==================================================================
1 Product 200 Brand Black,Blue,white
我也尝试编写函数,但我有select语句,所以它给了我错误。
我有一个选项
使用product table和variant列中的列创建临时表。在该表中首先从产品表中插入详细信息然后创建corsor并使用存储过程获取每个产品的变体并从此临时表中选择产品但我有数百个产品因此在迭代数百次时我必须避免这个.please建议我如何在select语句中调用上面的存储过程以其他最佳方式执行此操作。
答案 0 :(得分:1)
这样做更容易,而不是编写存储过程:
select p.*,
stuff((select ',' + variant_name
from variant v
where v.productid = p.productid
for xml path ('')
), 1, 1, ''
) as variants
from product p;