SQL Server 2008-更新临时表
我有一个存储过程,在这个存储过程中,我试图检索每个用户完成的最后一个票证,该票证以逗号分隔的用户名字符串列出。用户可能没有与之关联的票证,在这种情况下,我知道我只需要返回null。我正在使用的两个表定义如下:SQL Server 2008-更新临时表,sql,sql-server-2008,temp-tables,Sql,Sql Server 2008,Temp Tables,我有一个存储过程,在这个存储过程中,我试图检索每个用户完成的最后一个票证,该票证以逗号分隔的用户名字符串列出。用户可能没有与之关联的票证,在这种情况下,我知道我只需要返回null。我正在使用的两个表定义如下: User ---- UserName, FirstName, LastName Ticket ------ ID, CompletionDateTime, AssignedTo, AssignmentDate, StatusID TicketStatus ------------ ID
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不知道如何仅获取update语句中的最后一条记录
谢谢大家! 一旦您将数据加载到#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
在这种情况下,我想你不需要临时座位。您只想知道,“对于逗号分隔列表中的每个用户,他们最近完成的票证是什么(如果有的话)” 所以,您需要为每个用户找出最新的票证,并且您希望确保加入该结果,这样,如果用户没有票证,您仍然可以将其取回 这是未经测试的,但希望它能给你一个基本的想法
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;
TicketID是否连续(即每个用户的最后一张票证是否也具有该用户所有票证中最高的ID?)以及如何加入
票证
和用户
?AssignedTo
是否加入了UserName
?#票证是空的,不是吗?我假设他的现有代码在前面,但我会添加一条注释。