【发布时间】:2016-08-18 00:18:52
【问题描述】:
我又是新手。我再说一遍,因为我第一次介绍 SQL 是在 1992 年在 AS400 上。
我知道有一些类似的帖子。我试图从每个人那里得到想法来解决我的问题,但几乎没有成功。这是我想要做的。有3张桌子。两个源表和一个目标表。源表是Tickets 和TicketEntities,目标表是DelTimes。
Tickets 有列:
(Id (primary), TicketNumber, LastUpdateTime and LastOrderDate, DepartmentId)
TicketEntities 有列:
(Ticket_Id, EntityTypeId, EntityName)
目标表DelTimes有:
(TicketId, TicketNo, TicketDate, LOTime, LOMinutes, DriverNam)
lastOrderDate 和 LastUpdateTime 是日期和时间的组合,我必须从使用 convert 中提取信息。
这是迄今为止我遇到的错误多部分标识符问题。
IF EXISTS (SELECT * FROM Tickets, TicketEntities Where Tickets.DepartmentId = 2 and EntityTypeId = 3)
UPDATE DelTimes
SET TicketId =Tickets.Id,
DelTimes.TicketNo = Tickets.TicketNumber,
DelTimes.TicketDate = CONVERT(Date,Tickets.LastOrderDate,5),
DelTimes.LOTime = Convert(datetime,Tickets.LastOrderDate,8),
DelTimes.LOMinutes = DATEDIFF(minute,Tickets.LastOrderDate,Tickets.LastUpdateTime),
DelTimes.DriverNam = TicketEntities.EntityName
ELSE
INSERT INTO DelTimes (TicketId, TicketNo, TicketDate, LOTime, LOMinutes, DriverNam)
VALUES (Id, TicketNumber, CONVERT(Date,LastOrderDate,5),
Convert(datetime,LastOrderDate,8),
DATEDIFF(minute,LastOrderDate,LastUpdateTime),
EntityName)
感谢您帮助解决这个问题!
【问题讨论】:
-
格式代码。更多的人会尝试并提供帮助。
-
看起来不像其他帖子是怎么做到的?
-
有 4 个空格。我会帮你编辑的。
-
我认为您缺少用于更新的
WHERE子句,还是要编辑目标表的所有条目?您不应该查看目标表中是否存在该条目来决定是更新还是插入? -
推荐学习 MERGE 语句——它确实会简化你的代码并使你的代码更具可读性。 technet.microsoft.com/en-us/library/bb522522(v=sql.105).aspx
标签: sql sql-server not-exists