SQL 逗号语法错误
SQL Syntax errors with commas
完成新手学习。
当 "OrderDate" 为 updated/entered 时,我希望 Table "Sales" 填充 Table "Finance" 但是我无法插入多个列。
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
感谢阅读。
您的方法存在一些问题..
您并不总是以 "block of data" 的方式看待这个问题。当然,您一次只能插入一行,但实际上可以同时将多行插入到 table 中。发生这种情况时,inserted
伪table 将有不止一行,因此您不能从它 select 一个唯一的订单日期到一个变量@orderdate。避免使用 sqlserver 触发器进行任何类型的 "row by row" 思考; sqlserver服务器端编程的设计意图是始终基于集合;您在触发器中编写的任何内容都应该一次处理从零到数百万行的任何内容,而不是一次处理一行
我不太确定你将日期与 0 进行比较的行试图实现什么
您随后 运行 插入,有效地将订单 table 中的数据插入财务 table。没有计算或从其他地方引入新的或不同的数据,这使我相信订单和财务共享大量列,具有相同的数据。在数据库设计方面,这是一个糟糕的规范化策略;如果财务 table 复制订单 table,它可能不应该存在。实际上,如果您的业务逻辑是订单 table 中具有非空 OrderDate 的条目实现了财务 table 中的条目,那么财务实际上可能只是基于 VIEW
简单查询
SELECT blahblah FROM orders WHERE orderdate IS NOT NULL
完成新手学习。
当 "OrderDate" 为 updated/entered 时,我希望 Table "Sales" 填充 Table "Finance" 但是我无法插入多个列。
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
感谢阅读。
您的方法存在一些问题..
您并不总是以 "block of data" 的方式看待这个问题。当然,您一次只能插入一行,但实际上可以同时将多行插入到 table 中。发生这种情况时,inserted
伪table 将有不止一行,因此您不能从它 select 一个唯一的订单日期到一个变量@orderdate。避免使用 sqlserver 触发器进行任何类型的 "row by row" 思考; sqlserver服务器端编程的设计意图是始终基于集合;您在触发器中编写的任何内容都应该一次处理从零到数百万行的任何内容,而不是一次处理一行
我不太确定你将日期与 0 进行比较的行试图实现什么
您随后 运行 插入,有效地将订单 table 中的数据插入财务 table。没有计算或从其他地方引入新的或不同的数据,这使我相信订单和财务共享大量列,具有相同的数据。在数据库设计方面,这是一个糟糕的规范化策略;如果财务 table 复制订单 table,它可能不应该存在。实际上,如果您的业务逻辑是订单 table 中具有非空 OrderDate 的条目实现了财务 table 中的条目,那么财务实际上可能只是基于 VIEW
简单查询
SELECT blahblah FROM orders WHERE orderdate IS NOT NULL