我有两种形式,即frmSupplier
和frmCustomer
,允许用户添加和更新客户和供应商信息。目前我们在SQL Server数据库中有两个表,分别为Customer
和Supplier
。我们将这两个表格迁移到一个名为Contact
的表格中,并将Customer
和Supplier
表格转换为视图。我们这样做是因为我们希望应用程序中的代码不再被修改,因为这需要时间。INSTEAD OF INSERT中的列的设置值
我研究并发现了INSTEAD OF INSERT
触发器。
这是SQL:为客户
CREATE TABLE [dbo].[Contact]
(
[ContactID] [int] IDENTITY(1,1) NOT NULL,
[Code] [varchar](20) NULL,
[ContactName] [varchar](52) NULL,
[Active] [bit] NULL,
[Customer] [bit] NULL,
[Supplier] [bit] NULL,
[DeliveryAddr1] [varchar](255) NULL,
[DeliveryAddr2] [varchar](75) NULL,
[DeliveryAddr3] [varchar](75) NULL,
[DeliveryAddr4] [varchar](75) NULL,
[CreateDate] [datetime] NULL,
[LastUpdated] [datetime] NULL,
[TempID] [int] NULL,
CONSTRAINT [PK_Contact]
PRIMARY KEY CLUSTERED ([ContactID] ASC)
) ON [PRIMARY]
GO
创建视图:
CREATE VIEW [dbo].[Customer]
AS
SELECT
ContactID AS CustID, Code AS CustCode,
ContactName AS CustName, Active, Customer,
DeliveryAddr1, DeliveryAddr2, DeliveryAddr3, DeliveryAddr4,
CreateDate, LastUpdated
FROM
dbo.Contact
WHERE
(Customer = 1)
GO
查看供应商:
CREATE VIEW [dbo].[Supplier]
AS
SELECT
ContactID AS SuppID, Code AS SuppCode,
ContactName AS SuppName, Active,
DeliveryAddr1, DeliveryAddr2, DeliveryAddr3, DeliveryAddr4,
CreateDate, LastUpdated
FROM
dbo.Contact
WHERE
(Supplier = 1)
我想,当插入一个供应商,它会将其插入到Contact
并设置为Supplier=1
,或者如果插入了客户,它将设置Customer=1
。
这是我的触发器:
CREATE TRIGGER trgNewCust
ON dbo.Contact
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO Customer
SELECT
[CustCode], [CustName], [Active],
[DeliveryAddr1], [DeliveryAddr2], [DeliveryAddr3], [DeliveryAddr4]
FROM
inserted
END
我会在哪里设置Customer=1
或Supplier=1
?另一个问题是,我如何知道Contact
中新插入的物品是供应商还是客户?
将值插入C#应用程序中,使用INSERT INTO Customer...
作为客户,INSERT INTO Supplier...
作为供应商。
将客户和供应商合并成一张表是一个坏的举动,你会后悔的。虽然他们可能有一些共同的属性,但他们是不同的实体,与组织有着不同的关系,并且他们将具有许多完全不同的属性......仅仅是我的2美分。 –