我想从一个或多个版本销毁ArchiveCommands中的订单 几个客户,删除这些ArchiveClient客户端,但要 仅当这些客户端在ArchiveCommands中没有订单时 去年。如果这些客户在去年有订单 必须禁止删除客户(及其订单)。
但我不知道为什么不能识别datecom的值。
列名无效:'datecom'。
然而,他在我的桌子旁,这不是逻辑。
CREATE TABLE ArchiveCommandes (
nocom int,
montcom int,
nocli int,
datecom datetime
)
CREATE TABLE ArchiveClient (
nocli int,
ctotmont int,
nbcom int
)
这是我的触发器:
create trigger detruit_commandes on ArchiveCommandes
for delete
as
if datediff(day, datecom , getdate()) < 365
begin
raiserror('Suppression des clients et de leurs commandes interdite', 16, 1)
rollback transaction
end
begin
delete a
from ArchiveClient a
join deleted d on a.nocli = d.nocli
end
答案 0 :(得分:0)
因为你的if语句引用了datecom,但那里没有查询。只是因为这是一个触发器,你不能只是在没有某种引用的情况下开始抛出列名。你可以在这里存在。这样的事情。
create trigger detruit_commandes on ArchiveCommandes
for delete
as
if exists(select * from inserted where datecom > dateadd(day, -365, getdate())
begin
raiserror('Suppression des clients et de leurs commandes interdite', 16, 1)
rollback transaction --I would urge not to use a rollback in your trigger. This can wreak havoc on calling applications. Raise the error and let it bubble back up.
end
begin
delete a
from ArchiveClient a
join deleted d on a.nocli = d.nocli
end