我一直收到转换错误,但我需要做的是从一个表中添加数据,并将DateAdded
列更改为新表中的DateUpdated
列。原始表中的数据是:
ProductID (PK, int, NOT NULL)
CategoryID (FK, int, NULL)
ProductCode (varchar(10), NOT NULL)
ProductName(varchar(255), NOT NULL)
Description(Text, NOT NULL)
ListPrice(money, NOT NULL)
DiscountPercent(money, NOT NULL)
DateAdded(datetime, NULL)
我创建了一个新表:
CREATE TABLE ProductsAudit
(AuditID int NOT NULL PRIMARY KEY,
ProductID int NOT NULL,
CategoryID int NULL,
ProductCode varchar(10) NOT NULL,
ProductName varchar(255) NOT NULL,
DateUpdated datetime NULL,
ListPrice money NOT NULL,
DiscountPercent money NOT NULL);
现在我需要添加1列并更改一列的名称,这就是我所做的:
USE MyGuitarShop;
GO
IF OBJECT_ID('Products_UPDATE') IS NOT NULL
DROP TRIGGER Products_UPDATE
GO
CREATE TRIGGER Products_UPDATE
ON Products
AFTER INSERT, UPDATE
AS
INSERT ProductsAudit
SELECT AuditID, Products.ProductID, Products.CategoryID, Products.ProductCode,
Products.ProductName,Products.ListPrice, Products.DiscountPercent, DateAdded AS DateUpdated
FROM Products JOIN ProductsAudit
ON ProductsAudit.AuditID = (SELECT AuditID FROM inserted)
我需要将DateAdded
列更改为DateUpdated
名称,但要插入原始数据中的所有数据
答案 0 :(得分:2)
您没有为insert语句指定列列表,因此这些列按其序号位置进行匹配。碰巧产品中的ListPrice与ProductsAudit中的DateUpdated匹配。这样做:
INSERT ProductsAudit (AuditID, ProductID, CategoryID, ProductCode,
ProductName, ListPrice, DiscountPercent, DateUpdated)
SELECT AuditID, Products.ProductID, Products.CategoryID, Products.ProductCode,
Products.ProductName,Products.ListPrice, Products.DiscountPercent, DateAdded
FROM Products JOIN ProductsAudit
ON ProductsAudit.AuditID = (SELECT AuditID FROM inserted)
答案 1 :(得分:1)
正如@dean所说 - 你没有指定列列表来插入数据 - 你必须在整个过程中混淆一些东西。
根据他的回答 - 我的抱怨是你没有考虑到Inserted
将包含多行 - 你也需要解决这个问题!
这就是你的触发器最终应该是什么样子:
CREATE TRIGGER Products_UPDATE
ON Products
AFTER INSERT, UPDATE
AS
-- define the INSERT and include the list of columns to insert into!
INSERT ProductsAudit (AuditID, ProductID, CategoryID, ProductCode,
ProductName, ListPrice, DiscountPercent, DateUpdated)
-- select data from the Inserted table - could be multiple rows!
-- join it to the ProductsAudit table via the ProductID (as PK)
SELECT
pa.AuditID,
i.ProductID, i.CategoryID, i.ProductCode,
i.ProductName, i.ListPrice, i.DiscountPercent, i.DateAdded
FROM Inserted i
JOIN ProductsAudit pa ON pa.ProductID = i.ProductID
HOWEVER 这只有在已经您ProductID
表格中任何给定ProductsAudit
的条目时才有效 - 您如何处理? ProductsAudit
表中没有条目的情况?如何插入新行并为该行确定新的AuditID
?