我尝试通过连接来自另一个表的行来更新临时表中的列。T-SQL连接来自行的字符串
看看这个:
DECLARE @Test VARCHAR(MAX);
CREATE TABLE #Test
(
EmployeeId INT
,Html VARCHAR(MAX)
);
CREATE TABLE #EmployeeItems
(
EmployeeId INT
,ItemNo INT
);
INSERT INTO #EmployeeItems (EmployeeId, ItemNo)
VALUES
(1, 1)
,(1, 2);
INSERT INTO #Test (EmployeeId, Html) VALUES (1, '<div class="first">');
SET @Test = '<div class="first">';
UPDATE T SET Html += '<div class="second">' + CAST(E.ItemNo AS VARCHAR) + '</div>'
FROM #Test AS T
JOIN #EmployeeItems AS E ON T.EmployeeId = E.EmployeeId;
SELECT @Test += '<div class="second">' + CAST(E.ItemNo AS VARCHAR) + '</div>'
FROM #Test AS T
JOIN #EmployeeItems AS E ON T.EmployeeId = E.EmployeeId;
UPDATE #Test SET Html += '</div>';
SET @Test += '</div>';
SELECT Html FROM #Test;
SELECT @Test;
DROP TABLE #Test;
DROP TABLE #EmployeeItems;
在#TEST表中的列包含:<div class="first"><div class="second">1</div></div>
而@测试变量包含:<div class="first"><div class="second">1</div><div class="second">2</div></div>
这是为什么?它有什么不同?我想我会得到相同的结果,但在表格的情况下,它只连接一行,第一个。
我该怎么做,而不是运行游标更新我的表?
编辑
我原来的问题来自于这样的事情:
我输入的数据是
CREATE TABLE #Actions(EmployeeId INT,EmployeeName VARCHAR(100),ActionStart TIME,ActionEnd TIME,Type VARCHAR(10));
INSERT INTO #Actions(EmployeeId,EmployeeName,ActionStart,ActionEnd, Type)
VALUES (1,'Bob','09:00','12:00', 'action'),(1,'Bob','14:30','16:00', 'action'),(1,'Bob','18:00','20:00', 'event'),(2,'Susan','10:00','12:00', 'action');
我想这样
<div class="employee" employeeid="1" employeename="Bob">
<div class="action" start="09:00" end="12:00" type="action"></div>
<div class="action" start="14:30" end="16:00" type="action"></div>
<div class="action" start="18:00" end="20:00" type="event"></div>
</div>
<div class="employee" employeeid="2" employeename="Susan">
<div class="action" start="10:00" end="12:00" type="action"></div>
</div>
如同第一输出例如这是一个简化的例子例。但是如果我解决了一个案例,我可以解决我的问题。你如何用FOR XML子句来做到这一点?
虽然可以,不要在TSQL生成html。你可以做的是查询'FOR XML'并使用xsl来转换结果。 (例如,你不应该对你的数据进行html编码吗?) –
好的。我编辑了一下我的问题,你能否给我一些建议? – John