2010-11-08 15 views
2

Certains logiciels tiers utilisent une table de «transfert» pour diverses importations, de sorte que tout ce que nous essayons d'importer peut être validé par leur logique métier. Toute table dans le système peut être une cible, et il est de pratique courante d'attribuer col1 comme "type" d'importation que vous effectuez.Puis-je donner une valeur par défaut à une colonne dans une vue pour les insertions?

Toutes les colonnes du tableau sont génériques, c.-à-d. "data1", "data2", "data3" etc ...

Ainsi, col1 est la colonne "type" désignée et sera définie sur "ContactImport" ou "ProductImport". Je ne voudrais pas vraiment retourner la colonne "type" ... ou au moins le renommer en "ImportType". J'ai donc commencé à créer des vues pour mieux gérer nos importations/exportations. Cependant, il semble que cela pourrait être source d'erreurs si les utilisateurs utilisent la vue v_ContactImport et doivent définir manuellement col1 sur "ContactImport", n'est-ce pas?

Alors est-il possible de donner à la vue une valeur par défaut à col1?

Depuis que je suis se précipiter et ne sais pas comment clair qui est, voici un exemple rapide de la vue elle-même:

CREATE VIEW v_ContactImport 
AS 

SELECT data2 as FirstName, 
     data3 as LastName, 
     data4 as Phone  
FROM StagingTable 
WHERE data1='ContactImport' 

et je voudrais juste faire

INSERT INTO v_ContactImport (FirstName, LastName, Phone) 
VALUES ('Jack', 'Handey', '5555555555') 

Alors si je sélectionnez v_ContactImport cet enregistrement reviendrait parce que data1 serait automatiquement mis à 'ContactImport'

Je suppose que ce n'est pas possible, mais j'ai pensé que je demanderais.

Répondre

4

Vous pouvez définir votre point de vue, puis (dans SQL Server 2005 et, et il y a probablement des structures similaires dans d'autres DBMS) créer un AU lieu de déclencher. Couper, coller, et modifier de BOL, il ressemblerait quelque chose comme:

--Create an INSTEAD OF INSERT trigger on the view. 
CREATE TRIGGER InsteadTrigger on v_ContactImport 
INSTEAD OF INSERT 
AS 
BEGIN 
    --Build an INSERT statement that adds in your column 
    INSERT INTO StagingTable 
     SELECT 'ContactImport', Col1, Col2, ColEtc 
     FROM inserted 
END 
GO 
+0

Cela fonctionne magnifiquement, merci! – CodeRedick