我想记录学生在门上刷卡时的动作。每次提供卡片ID和名称时,我都想检查它是否已经存在于学生表中的新组合。如果不存在,则使用FirstEntry和LastEntry插入一条新记录,它们的日期和Cardid是相同的,并且名称是发送到相应参数中的那个记录。如果组合已经存在,则只更新[LastEntry]字段。目前我的查询只更新现有记录,这意味着只有[LastEntry]字段被更新。更新这是正常的。但是,它不会为新条目插入新记录。 CardID和Name是表格上的复合主键。SQL Server合并Upsert仅进行更新并且没有插入
- 我不想使用IF Exists(Select ...)方法来达到 这个。
- 我只想使用MERGE。
- 此操作是在不使用任何临时表的情况下在同一张桌面上完成的
- 执行操作后,我希望在更新或插入方案中看到受影响的记录。仅显示以下字段[cardid,name,FirstEntry,LastEntry]而不是表中的其他字段。
- 该表有其他列,我不想显示或返回。
这里是我的发言只做更新
MERGE INTO
Students AS T
USING
(SELECT cardid, name, FirstEntry, LastEntry from Students where cardid = @id and name = @name) AS S
ON
(S.cardid = T.cardid
AND
S.name = T.name)
WHEN MATCHED THEN
UPDATE SET LastEntry = @DT
WHEN NOT MATCHED THEN
INSERT (cardid, name, FirstEntry, LastEntry) VALUES(@id, @name, @DT, @DT)
OUTPUT $action, S.cardid, S.name, S.FirstEntry, S.LastEntry;
随着我希望它影响插入,以及新记录
那么,你的问题到底是什么? – NickyvV
你的选择完全符合你的要求。如果带有“@id,@ name”键的记录不存在,则不会插入任何内容。 –
更新了问题Nicky – user20358