[英]SQL Server 2008 - Update a temporary table
我已经在存储过程中尝试检索由逗号分隔的用户名字符串中列出的每个用户完成的最后一张票证。 用户可能没有与之关联的票证,在这种情况下,我知道我只需要返回null。 我正在使用的两个表定义如下:
User
----
UserName,
FirstName,
LastName
Ticket
------
ID,
CompletionDateTime,
AssignedTo,
AssignmentDate,
StatusID
TicketStatus
------------
ID,
Comments
我创建了一个存储过程,其中我试图返回最后一个完成的票证,以逗号分隔的用户名列表。 每个记录都需要包括与之关联的注释。 目前,我正在尝试以下方法:
CREATE TABLE #Tickets
(
[UserName] nvarchar(256),
[FirstName] nvarchar(256),
[LastName] nvarchar(256),
[TicketID] int,
[DateCompleted] datetime,
[Comments] text
)
-- This variable is actually passed into the procedure
DECLARE @userList NVARCHAR(max)
SET @userList='user1,user2,user2'
-- Obtain the user information for each user
INSERT INTO #Tickets
(
[UserName],
[FirstName],
[LastName]
)
SELECT
u.[UserName],
u.[FirstName],
u.[LastName]
FROM
User u
INNER JOIN dbo.ConvertCsvToTable(@userList) l ON u.UserName=l.item
此时,我具有传入的每个用户的用户名,名字和姓氏。但是,我不知道如何实际为每个用户完成最后一张票。
我该怎么做呢? 我相信我应该更新自己创建的临时表。 同时,id不知道如何仅获取更新语句中的最后一条记录。
谢谢!
将数据加载到#tickets中后(如您的示例所示),此查询将为您提供每个用户名的最新信息:
select * from #tickets x
inner join
(select username, max(DateCompleted) as theDate
from #tickets group by username) y
ON x.username = y.username, x.DateCompleted = y.theDate
在这种情况下,我认为您不需要Tickets临时表。 您只想知道,“对于逗号分隔列表中的每个用户,他们最近完成的故障单(如果有)是什么”。
因此,您需要找出每个用户的最新票证,并且要确保外部加入该结果,因此,如果用户没有票证,您仍然可以将其取回。
这未经测试,但希望它能为您提供基本的想法。
SELECT u.UserName
, u.FirstName
, u.LastName
, t.ID
, t.CompletionDateTime
, t.AssignedTo
, t.AssignmentDate
, t.StatusID
FROM dbo.User u INNER JOIN dbo.ConvertCsvToTable(@userList) ON u.UserName=l.item
LEFT OUTER JOIN
(SELECT t.AssignedTo
, MAX(t.CompletionDateTime) CompletionDateTime)
FROM Ticket t
GROUP BY t.AssignedTo) t
ON t.AssignedTo = u.UserName;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.