IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Modification du 'XSD' pour une colonne de Type XML


Sujet :

Développement SQL Server

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2018
    Messages : 21
    Par défaut Modification du 'XSD' pour une colonne de Type XML
    Bonjour,
    Nous sommes en train d'évaluer l'opportunité d'adopter les colonnes de type XML dans nos tables.
    La gestion d'une situation reste sans réponse :

    1- Soit 'Xsd_v1' qui fait partie d'une collection de schéma

    2- Soit une table T1 qui défini une colonne C1 de type xml typé selon 'Xsd_V1'

    3- Evolution des besoins : on doit ajouter un attribut obligatoire (use="required") pour les futures valeurs de C1

    Comment faire cela (la table contient T1 contentant déjà des lignes) ?
    Merci de vos lumières.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    En urgence un ALTER XML SCHEMA COLLECTION pour ajouter un 2e schéma qui contient le schéma modifié.

    De façon planifié, supprimer et recréer la collection de schémas XML…
    Pour ce faire :
    1) démarrer une transaction
    2) supprimer les éventuels index XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DROP INDEX nom_index_XML ON mon_schema.ma_table
    3) modifiez la colonne XML pour virer la référence à la collection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER mon_schema.ma_table ALTER COLUMN ma_colonne_XML XML
    4) supprimer le schéma XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DROP XML SCHEMA COLLECTION ma_collection_de_schemas_XML
    5) recréer la collection de schémas XML
    CREATE XML SCHEMA COLLECTION ma_collection_de_schema_XML
    6) modifier la colonne pour lui associer la collection de schema XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER mon_schema.ma_table ALTER COLUMN ma_colonne_XML XML (ma_collzection_de_schemas_XML)
    7) recréer les index XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE PRIMARY XML INDEX nom_index_XML ON mon_schema.ma_table (colonne_XML)

    8) terminer la transaction :
    SI tout va bien :
    si tout va mal :
    Et pour maîtriser tous ces sujets et bien d'autres, n'hésitez pas à acheter notre livre sur SQL Server :
    Nom : Couverture livre SQL server Eyrolles.jpg
Affichages : 176
Taille : 105,0 Ko


    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2018
    Messages : 21
    Par défaut
    Sauf erreur de ma part cela ne répond pas à la demande : Le problème soulevé n'est pas dans la syntaxe SQL mais dans le fait que l'attribut "required" arrive à posteriori.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    je ne me suis pas trompé... j'ai bien compris la question. Et la façon de le résoudre est bien celle donnée ! relisez...

    Et pour la valeurs futures, vérifier en sus par un déclencheur la présence de l'attribut.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2018
    Messages : 21
    Par défaut
    Après test, la réponse est : non, la collection agit bien en tant que contrainte check et si la nouvelle définition n'est pas compatible il faut modifier toutes les valeurs existantes préalablement.
    J'eusse apprécié un équivalent de NOCHECK.

    Pour info le script du test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    use Test;
    go
    create schema Test_xml;
    go
     
    /*
    	Creation de la table de TEST et ajout de valeur
    */
    create xml schema collection Ma_Collection_XML as
    	'  
    	<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    		<xs:element name="EnteteBip">
    			<xs:complexType>
    				<xs:attribute name="version" type="xs:string"/>
    			</xs:complexType>
    		</xs:element>
    	</xs:schema>';
    go
    drop table if exists Test_xml.ma_table;
    create table Test_xml.ma_table
    	(
    	    Id int not null identity primary key
    	  , ma_colonne_xml xml(Ma_Collection_XML) not null
    	);
    go
    insert into Test_xml.ma_table
    	(ma_colonne_xml)
    	values
    	('<EnteteBip version="1.0"></EnteteBip>');
     
    select MT.Id, MT.ma_colonne_xml from Test_xml.ma_table as MT;
     
    /*
    	Evolution du schéma collection
    */
    create xml schema collection Ma_Collection_XML_2 as
    	'  
    	<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    		<xs:element name="EnteteBip">
    			<xs:complexType>
    				<xs:attribute name="version" type="xs:string" />
    				<xs:attribute name="Name" type="xs:string" use="required"/>
    			</xs:complexType>
    		</xs:element>
    	</xs:schema>';
    go
    alter table Test_xml.ma_table
    	alter column ma_colonne_xml xml(Ma_Collection_XML_2);

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Il faut donc ajouter le nouveau schéma à la collection et utiliser un déclencheur en complément.

    Effectivement le NOCHECK n'est pas disponible pour le XML typé, et je n'ai pas trouvé le moyen de voir quel schéma de la collection avait été checké pour une nouvelle entrée....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2018
    Messages : 21
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Il faut donc ajouter le nouveau schéma à la collection et utiliser un déclencheur en complément.
    Pourrais tu expliciter cela ?


    Ps : On ne trouve plus à la vente le livre "langage SQL". Une nouvelle, nouvelle réédition est prévue ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Tagginfo Voir le message
    Ps : On ne trouve plus à la vente le livre "langage SQL". Une nouvelle, nouvelle réédition est prévue ?
    Pourtant je le vois disponible sur amazon.fr et aussi chez Eyrolles...

  9. #9
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2018
    Messages : 21
    Par défaut
    Digression de la demande pour parler du livre SQL.


    Pour autant, je reste preneur de l'explication de comment utiliser un déclencheur et un schéma xml ...

  10. #10

  11. #11
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2018
    Messages : 21
    Par défaut
    Quiproquo .
    Chacun de nous parlait d'un livre, mais pas du même

    J'ai du passer mon exemplaire aux collègues.
    Mais j'aimerai bien le garder !


    Non pas que le nouveau soit mauvais, mais il me semble que ce ne sont pas les mêmes ^^

  12. #12
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2018
    Messages : 21
    Par défaut
    je suis toujours preneur de l'explication à base de trigger

  13. #13
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    En gros un déclencheur INSERT, UPDATE qui vérifier la présence de l'attribut via une requête XQuery, par l'intermédiaire de la méthode exist....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. BCP pour une colonne de type univarchar
    Par Alain93330 dans le forum Sybase
    Réponses: 0
    Dernier message: 09/08/2017, 11h56
  2. auto_increment pour une colonne de type char
    Par win_ubuntu dans le forum Requêtes
    Réponses: 5
    Dernier message: 09/05/2016, 18h12
  3. Réponses: 1
    Dernier message: 05/02/2016, 15h26
  4. [Débutant] Type Enum pour une colonne d'un DataTable
    Par thibab dans le forum VB.NET
    Réponses: 2
    Dernier message: 19/09/2014, 21h45
  5. Réponses: 2
    Dernier message: 13/11/2009, 13h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo