我创建了一个触发器,该触发器应该在对表进行插入后更新同一表中的另一个值。我确实得到了想要的结果,但是当我问老师是否正确时,他回答说该触发器更新了“所有”表(?),因此是不正确的。他只会对此进行解释(他是那种老师...)。谁能理解他的意思?没有在寻找正确的代码,只是对我可能被误解的解释。
CREATE TRIGGER setDate
ON Loans
AFTER INSERT
AS
BEGIN
UPDATE Loans
set date = GETDATE()
END;
答案 0 :(得分:1)
您的老师打算说查询会更新表中的所有行-也许您误解了她或他。
执行所需操作的最佳方法是使用默认值:
alter table loans alter column date datetime default getdate();
也就是说,不需要触发器。如果您确实使用了触发器,我会给您两个提示:
instead of
触发器。inserted
应该在触发器中的某个位置。答案 1 :(得分:0)
你好。我赞成你的问题,因为这可能是许多 SQL Server 初学者的问题。
正如我所见,您正确定义了触发器!这是一种正确的方法,尽管它不是最好的。
顺便说一下,我们不会讨论您可以选择或不选择的所有方式,我会更正您的代码并解释您老师的意思。
看看你写的这个更新:
import PySimpleGUI as sg
import requests
import datetime
current_time = datetime.datetime.now()
dzien = datetime.datetime.today().weekday()
data = datetime.date.today()
week_days = ["Poniedziełek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"]
pon = ["Historia", "Matematyka", "Niemiecki", "Chemia", "Fizyka"]
wt = ["Angelski", "Informatyka/PP", "Biologia", "Matematyka"]
sr = ["Angileski", "Fizyka", "Matematyka", "Polski", "Wychowawcza"]
czw = ["Nic/WOS", "WF", "Religia", "Geografia"]
pt = ["Matematyka", "Polski", "Fizyka"]
week_subject = {0:pon, 1:wt, 2:sr, 3:czw, 4:pt}
width = max(map(lambda x:max(map(len, x)), week_subject.values()))
height = max(map(len, week_subject.values()))
def lekcje(dzien, size):
text = '\n'.join(week_subject[dzien]) if dzien < 5 else ''
return sg.Text(text, size=size)
sg.theme('DarkBlue')
sg.set_options(font=('Couier New', 16))
asdf = [[lekcje(dzien, (width, height))]]
layout = [[sg.Column(asdf)]]
window = sg.Window("Zegar", layout)
while True:
event, values = window.read()
if event == sg.WIN_CLOSED:
break
window.close()
如果你写了一个没有 WHERE 子句的 SELECT,它会做什么?这将导致所选表中的所有行。对吗?
UPDATE Loans
SET date = GETDATE()
因此,如果没有 WHERE 子句,您的 UPDATE 将更新表中的所有行。
现在如何更新最近插入的唯一一行(或多行)?
在编写触发器时,您可以使用此表:SELECT * FROM dbo.loans
它具有最近插入的行。有点这些行首先来到这个表,然后去最终目标表。 这样您就可以在它们消失之前更新它们Inserted
应该是这样的:
dbo.loans