如何针对表中的每一行迭代运行SQL查询?

时间:2013-07-18 13:04:20

标签: sql sql-server

我有以下查询:

DECLARE @AccString varchar(max)
SET @AccString=''


SELECT @Acctring=@AccString + description + '  [   ]    ' 
FROM tl_sb_accessoryInventory ai
JOIN tl_sb_accessory a on a.accessoryID = ai.accessoryID
WHERE userID=6 

SELECT userID, serviceTag, model, @AccString AS ACCESSORIES FROM tl_sb_oldLaptop ol
JOIN tl_sb_laptopType lt ON ol.laptopTypeID = lt.laptopTypeID
WHERE userID=6

输出:

enter image description here

我希望能够为表tl_sb_user中的每个userID运行此功能。

获取用户标识的声明是:

Select userID from tl_sb_user

如何让每个用户输出一行?

2 个答案:

答案 0 :(得分:3)

您正在尝试执行字符串连接子查询。在SQL Server中,您需要使用带有for xml path的相关子查询来执行字符串连接。奥术,但它通常有效。

结果是这样的:

SELECT userID, serviceTag, model, @AccString AS ACCESSORIES,
       stuff((select  '  [   ]    ' + description
              from tl_sb_accessoryInventory ai join
                   tl_sb_accessory a
                   on a.accessoryID = ai.accessoryID
              where a.userId = ol.UserId
              for xml path ('')
             ), 1, 11, '') as accessories
FROM tl_sb_oldLaptop ol JOIN
     tl_sb_laptopType lt
     ON ol.laptopTypeID = lt.laptopTypeID;

您没有表明列来自何处的表别名,因此我只是猜测a.userId = ol.UserId引用了正确的表。

此外,这会用html表单替换某些字符。值得注意的是,'<''>'会变成'&lt;''&gt;'之类的内容。当我遇到此问题时,我使用replace()替换值。

答案 1 :(得分:0)

简单地省略WHERE条款。