2016-05-24 7 views
0

Ich habe eine Tabelle z. Customers(CustomerType, Name) und zwei Ansichten für jeden Kundentyp:In Sicht einfügen und Standardwerte für die zugrunde liegende Tabelle verwenden

create view PremiumCustomers as 
(
    select Name from Customers where CustomerType = 1 
); 

und

create view NormalCustomers as 
(
    select Name from Customers where CustomerType = 2 
); 

Gibt es eine Weise, die ich in jeder dieser Ansichten einfügen könnte und den Standardwert für CustomerType entsprechend eingestellt?

z.B. unter Verwendung von:

INSERT INTO PremiumCustomers (name) VALUES ('foo') 

('foo',2) zur Customers Tabelle einzufügen.

+0

Ein anstelle-von-Trigger ist der Weg zu gehen. – dean

+0

Sie haben Recht, Dekan. – StackUser

Antwort

1

Versuchen Sie, wie dieses

CREATE TRIGGER TrPremiumCustomersInsteadTrigger on PremiumCustomers 
INSTEAD OF INSERT 
AS 
BEGIN 
    INSERT INTO Customers (Name, CustomerType) 
     SELECT Name, 1 
     FROM inserted 
END; 


CREATE TRIGGER TrNormalCustomersInsteadTrigger on NormalCustomers 
INSTEAD OF INSERT 
AS 
BEGIN 
    INSERT INTO Customers (Name, CustomerType) 
     SELECT Name, 2 
     FROM inserted 
END; 

INSERT INTO PremiumCustomers (name) VALUES ('foo') 
INSERT INTO NormalCustomers (name) VALUES ('foo') 
+0

Also muss ich einen Trigger für jeden CustomerType machen? Hat das irgendwelche Leistungsprobleme? – xpy

+0

@xpy - warum fragen Sie, ob es Leistungsprobleme gibt, da dies die einzige Lösung zu sein scheint, die zu Ihren * Anforderungen * passt? –

+0

Es kann zu Leistungseinbußen kommen, wenn Sie mit Ihrer Ansicht das Laden von Massen durchführen. – StackUser