使用Getdate()和日期无法识别,但在我的表

时间:2018-03-26 14:23:37

标签: sql sql-server triggers

我想从一个或多个版本销毁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

1 个答案:

答案 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