完成Newb尝试学习。
我想要Table" Sales"填写表"财务"当" OrderDate"已更新/输入,但我无法插入多列。
CREATE TRIGGER SalesOrderDateTrigger
ON [dbo].[Sales]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @OrderDate Date
SELECT @OrderDate = INSERTED.OrderDate FROM INSERTED
IF @OrderDate > 0
BEGIN
INSERT INTO Finance
(Quote, Customer, Project_Name, [Value],
POC_Name_#1, POC_Number_#1, POC_Email_#1,
POC_Name_#2, POC_Number_#2, POC_Email_#2,
Comment, [DA Link])
SELECT (INSERTED.Quote, INSERTED.Customer, INSERTED.Project_Name,
INSERTED.[Value],
INSERTED.POC_Name_#1, INSERTED.POC_Number_#1, INSERTED.POC_Email_#1,
INSERTED.POC_Name_#2, INSERTED.POC_Number_#2, INSERTED.POC_Email_#2,
INSERTED.Comment, INSERTED.[DA Link])
FROM INSERTED
END
END
感谢您的阅读。
答案 0 :(得分:0)
您的方法存在一些问题..
你并不总是在数据块中看到这个"一种方式。当然,您一次只能插入一行,但实际上可以同时在表中插入多行。发生这种情况时,inserted
pseudotable将有多个行,因此您无法从中选择唯一的订单日期到单个变量@orderdate。避免任何类型的"逐行"用sqlserver触发器思考; sqlserver服务器端编程的设计意图是它总是基于设置;你在触发器中写的任何东西都应该同时处理从0到数百万行的任何行,而不是一次一行
我不确定你将日期与0进行比较的行是什么,正在努力实现
随后,您运行一个有效地将Order表中的数据插入Finance表的插入。没有新的或不同的数据被计算或从其他地方引入,这使我相信订单和财务共享大量列,具有相同的数据。在数据库设计方面,这是一种较差的规范化策略;如果财务表复制订单表,它可能不应该存在。实际上,如果您的业务逻辑是Orders表中具有非null OrderDate的条目在财务表中实现了一个条目,那么真的财务实际上可能只是基于简单查询的VIEW
SELECT blahblah FROM orders WHERE orderdate IS NOT NULL