Share via


Modification des données dans les vues partitionnées

Si une vue partitionnée ne peut pas être mise à jour, elle ne peut servir que de copie accessible en lecture seule de la table d'origine. Une vue partitionnée pouvant être mise à jour peut présenter toutes les fonctionnalités de la table d'origine.

Une vue est considérée comme une vue partitionnée pouvant être mise à jour si elle constitue un ensemble d'instructions SELECT dont les différents jeux de résultats sont regroupés en un seul via l'instruction UNION ALL. Chaque instruction SELECT référence une seule table de base SQL Server. La table peut être une table locale ou une table liée référencée à l'aide d'un nom en quatre parties, la fonction OPENROWSET ou la fonction OPENDATASOURCE (vous ne pouvez pas utiliser une fonction OPENDATASOURCE ou OPENROWSET qui spécifie une requête directe).

En outre, les instructions de modification de données faisant référence à la vue doivent respecter les règles définies pour les instructions INSERT, UPDATE et DELETE.

Notes

L'importation en bloc dans une vue partitionnée n'est pas prise en charge par la commande bcp, ni par l'instruction INSERT BULK, ni par l'instruction INSERT ... SELECT * FROM OPENROWSET(BULK...). Toutefois, vous pouvez insérer plusieurs lignes dans une vue partitionnée en utilisant une instruction INSERT.

Si la vue partitionnée est répartie entre les serveurs, évitez d'utiliser des actions en cascade ou commandées par un déclencheur sur les tables de base. Une action en cascade ou commandée par un déclencheur risquerait de modifier les données sous-jacentes et d'affecter la définition de la vue.

Les vues partitionnées distribuées peuvent être mises à jour seulement si l'utilisateur possède l'autorisation CONTROL, ALTER, TAKE OWNERSHIP ou VIEW DEFINITION sur chaque table sous-jacente de la vue. Pour plus d'informations, consultez Dépannage de la visibilité des métadonnées des vues partitionnées distribuées.

Notes

Vous ne pouvez modifier des données via une vue partitionnée distribuée que si vous installez SQL Server 2008 Enterprise ou SQL Server 2008 Developer. Cependant, vous pouvez modifier les données à l'aide d'une vue partitionnée locale dans n'importe quelle version de SQL Server 2008.

Instructions INSERT

Les instructions INSERT ajoutent des données aux tables membres à travers la vue partitionnée. Les instructions INSERT doivent respecter les règles suivantes :

  • Toutes les colonnes doivent être incluses dans l'instruction INSERT, même si la colonne peut être NULL dans la table de base ou possède une contrainte DEFAULT définie dans la table de base.

  • Le mot clé DEFAULT ne peut pas être spécifié dans la clause VALUES de l'instruction INSERT.

  • Les instructions INSERT doivent fournir une valeur qui est compatible avec la logique de la contrainte CHECK définie sur la colonne de partitionnement pour l'une des tables membres.

  • Les instructions INSERT ne sont pas autorisées si une table membre contient une colonne avec une propriété d'identité.

  • Les instructions INSERT ne sont pas autorisées si une table membre contient une colonne timestamp.

  • Les instructions INSERT ne sont pas autorisées s'il existe une jointure réflexive sur la vue ou une des tables membres.

Instructions UPDATE

Les instructions UPDATE modifient les données dans une ou plusieurs tables membres à travers la vue partitionnée. Les instructions UPDATE doivent respecter les règles suivantes :

  • Les instructions UPDATE ne peuvent pas spécifier le mot clé DEFAULT comme valeur de la clause SET, même si la colonne possède une valeur DEFAULT définie dans la table membre correspondante.

  • La valeur d'une colonne ayant une propriété d'identité ne peut pas être modifiée ; toutefois, les autres colonnes peuvent être mises à jour.

  • La valeur de PRIMARY KEY ne peut pas être modifiée si la colonne contient des données text, image ou ntext.

  • Les mises à jour ne sont pas permises si une table de base contient une colonne timestamp.

  • Les mises à jour ne sont pas autorisées s'il existe une jointure réflexive sur la vue ou une des tables membres.

Instructions DELETE

Les instructions DELETE suppriment des données dans une ou plusieurs tables membres à travers la vue partitionnée. Les instructions DELETE ne sont pas autorisées s'il existe une jointure réflexive sur la vue ou une des tables membres.