SQL Server 2008-更新临时表

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

我有一个存储过程,在这个存储过程中,我试图检索每个用户完成的最后一个票证,该票证以逗号分隔的用户名字符串列出。用户可能没有与之关联的票证,在这种情况下,我知道我只需要返回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不知道如何仅获取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
?#票证是空的,不是吗?我假设他的现有代码在前面,但我会添加一条注释。