DLR a écrit a écrit :
tu peux pas etre plus precis avec un exemple de code SQL?
c'est ptet paske tu met tous les champs, paske les vues des fois c cho a faires des insert et update dessus
regarde si ta vue est bien faite...
|
Ben, dans une vue partitionnée, il faut mettre tous les champs de chaque table (les tables ayant une structure identique).
En fait, j'ai fait un :
CREATE VIEW [dbo].[mavue]
AS
SELECT *
FROM matable1
UNION ALL
SELECT *
FROM matable2
UNION ALL
SELECT *
FROM matable13
UNION ALL
.....
Suivant la valeur d'1 champ, l'enregistrement se fait automatiquement dans la table 1 ou 2 ou ... C'est SQL Serveur qui gère ça, suivant une contrainte CHECK sur chaque table.
Exemple : Dans la structure de ces tables, il y a un champ caractère nommé CHOIX_TYPE, qui peut avoir la valeur A, B, C, ...
Si CHOIX_TYPE = A alors l'enregistrement est sauvegardé dans la table1
Si CHOIX_TYPE = B enregistrement dans table2
Si CHOIX_TYPE = C enregistrement dans table3
...
L'instruction SELECT fonctionne bien.
L'instruction UPDATE aussi. Même si je change la valeur de CHOIX_TYPE, SQL serveur le delete bien de la table d'origine pour le mettre dans la table de destination (Donc dans le cas ou CHOIX_TYPE était A et devient B, SQL Serveur delete l'enregistrement de Table1 pour le mettre dans table2).
Par contre, l'instruction INSERT ne fonctionne pas !!!
L'instruction que je fais ressemble à ça :
INSERT INTO mavue (champ1, champ2, CHOIX_TYPE, ...) VALUES (0, 0, 'A', ...)
La syntaxe est correcte, mais l'ordre ne passe pas. Si je vais directement dans ma vue via SQL Server Entreprise Manager, et que je rajoute un enregistrement, j'ai le même message