我有兩種形式,即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美分。 –