[英]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.