SQL语法错误与逗号

时间:2017-12-13 23:43:44

标签: sql database trigger.io eventtrigger database-trigger

完成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

感谢您的阅读。

1 个答案:

答案 0 :(得分:0)

您的方法存在一些问题..

你并不总是在数据块中看到这个"一种方式。当然,您一次只能插入一行,但实际上可以同时在表中插入多行。发生这种情况时,inserted pseudotable将有多个行,因此您无法从中选择唯一的订单日期到单个变量@orderdate。避免任何类型的"逐行"用sqlserver触发器思考; sqlserver服务器端编程的设计意图是它总是基于设置;你在触发器中写的任何东西都应该同时处理从0到数百万行的任何行,而不是一次一行

我不确定你将日期与0进行比较的行是什么,正在努力实现

随后,您运行一个有效地将Order表中的数据插入Finance表的插入。没有新的或不同的数据被计算或从其他地方引入,这使我相信订单和财务共享大量列,具有相同的数据。在数据库设计方面,这是一种较差的规范化策略;如果财务表复制订单表,它可能不应该存在。实际上,如果您的业务逻辑是Orders表中具有非null OrderDate的条目在财务表中实现了一个条目,那么真的财务实际上可能只是基于简单查询的VIEW

SELECT blahblah FROM orders WHERE orderdate IS NOT NULL