我想从SQL中获取产品图片列表,以便在图片幻灯片中显示。
但是,我不确定从MS SQL存储过程返回数据的最佳方法。
问题是,对于下面的SP,我得到每个图像的重复记录。理想情况下,我想获得一个数组或字符串列表或某种方法来从单个记录中分离出数据。但是,我对其他解决方案持开放态度。我的目标是以直观的方式在页面上获取图像。这适用于ASP.Net C#应用程序。
这是我的存储过程的简化select语句:
SELECT
P.[ProductId]
,P.[ProductName]
,I.[FileName] as ProductImage
FROM [Product] P
LEFT JOIN [ProductImages] I
on P.ProductId = I.ProductId
Where P.ProductId = @ProductId
返回如下所示的数据:
ProductId ProductName ProductImage
1 Coffee Mug Mug_Image1.jpg
1 Coffee Mug Mug_2.jpg
1 Coffee Mug Mug_Img3.jpg
我希望它看起来像这样(但我也想听听其他想法):
ProductId ProductName ProductImage
1 Coffee Mug Mug_Image1.jpg, Mug_2.jpg, Mug_Img3.jpg
同样,我不确定这是否是最佳方式。
我有两张桌子。一个是Product,另一个是ProductImages,它与Product表中的ProductId有一个FK。
最终,我需要构建JSON来提供客户端幻灯片脚本。像这样:
productimages = [
{ "image": "Mug_Image1.jpg", "caption": "", "link": "", "title": "" },
{ "image": "Mug_2.jpg", "caption": "", "link": "", "title": "" },
{ "image": "Mug_Img3.jpg", "caption": "", "link": "", "title": "" }
];
这是C#
//Create product object to display on page
ProductEntity product = new ProductEntity();
product.Id = idval;
//Load the product from SP based on ID
ProductWF.LoadProduct(product);
//Render product details on page
ProductNameLabel.Text = product.ProductName;
//Construct JSON image list
StringBuilder sb = new StringBuilder();
etc...
答案 0 :(得分:1)
您可以使用以下内容:
SELECT
P.[ProductId],
P.[ProductName],
FileNames = STUFF(
(SELECT ', ' + FileName FROM ProductImages
WHERE ProductId = P.ProductId FOR XML PATH('')) , 1 , 1 , '')
FROM
[Product] P
以逗号分隔每个产品的文件名列表,如果有帮助的话。但是,您要生成的JSON字符串可能比您已有的查询结果更简单。
如果从上面进行查询,可以将其映射到类:
public class Product
{
public int ProductId {get; set;}
public string ProductName {get; set;}
public string FileNames {get; set;}
}
在服务器端,您必须拆分FileNames字符串属性并构造一个json字符串。