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 :

Option SCHEMABINDING - Create function


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2014
    Messages : 80
    Par défaut Option SCHEMABINDING - Create function
    Bonjour à tous,

    Actuellement j'essaye de comprendre les subtilités du langage Transact SQL.
    Je dois avouer que j'ai beaucoup de mal avec la notion de Schemabinding.

    Je pense avoir compris que l'option schemabinding indique que la fonction est liée à la totalité des éléments présents dans la table, donc la suppression, modification d'un élément ou de la table est impossible.

    - Sauriez vous me dire si ma compréhension est exacte ?
    - Sauriez vous me donner une autre explication plus précise ou mieux argumentée ?
    - Sauriez vous m'expliquer le but d'implémenter l'option schemabinding ?

    Au niveau de l'implémentation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    create function fn_comprendre_schemabinding
    (@reponsedeveloppez nvarchar(600))
    returns table
    with schemabing
    AS
    return
    (
    select Probleme, Question, Reponse from SQL
    where Reponse=@reponsedeveloppez
    )
    - Trouvez vous le code correcte ?
    - Si j'ai bien compris une fois la fonction enregistrée, je ne pourrais plus modifier ou supprimer la colonne "Probleme", "Question", "Reponse" ou même la table "SQL"

    J'essaye vraiment de bien comprendre les différentes notions avant de passer aux procédures stockées.
    Merci par avance pour votre aide

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Citation Envoyé par Vinc06 Voir le message
    Je pense avoir compris que l'option schemabinding indique que la fonction est liée à la totalité des éléments présents dans la table, donc la suppression, modification d'un élément ou de la table est impossible.

    - Sauriez vous me dire si ma compréhension est exacte ?
    En fait, seuls les éléments réellement utilisés par la fonction ne pourront être supprimés (NB : Ils ne pourront pas non plus être modifiés). Si cette table contient par exemple une autre colonne non utilisée dans la fonction, elle pourra être supprimée/modifiée.

    Citation Envoyé par Vinc06 Voir le message
    - Sauriez vous m'expliquer le but d'implémenter l'option schemabinding ?
    Cela permet comme on l'a vu de s'assurer de la stabilité de la fonction. Sans cela, une fonction pourrait provoquer une erreur au beau milieu d'une requête car une colonne à laquelle elle doit accéder à été supprimée.
    De plus, c'est une condition nécessaire (mais non suffisante) pour que votre fonction soit considérée comme déterministe par le système. Cela permet dans certains cas d'en limiter les appels dans une requêtes, mais également, cela permet d'utiliser votre fonction dans une vue indexée.

    Citation Envoyé par Vinc06 Voir le message
    - Trouvez vous le code correcte ?
    C'est balo mais... vous avez mal écrit schemabinding

    Par ailleurs, pour pouvoir utiliser cette option, il faut que les schéma soient explicitement spécifiés, votre nom de table devrait donc être préfixé de son schéma (on va supposer dbo) : FROM dbo.SQL

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 : 21 998
    Billets dans le blog
    6
    Par défaut
    SQL étant un langage dynamique, c'est à dire ne nécessitant pas l'arrêt du programme en cas de modification du code (contrairement à la plupart des langages de développement comme C++, C# ou Java), il permet de créer des objets dépendants d'autres objets non encore créé.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE FUNCTION F ()
    RETURNS INT
    AS
    BEGIN 
    RETURN (SELECT TOP 1 C
            FROM T)
    END;
    GO
     
    CREATE TABLE T (C INT)
    GO
    l'option SHEMABINDING oblige a ce que les objets soient préalablement existant et stable durant la vie de l'objet en liaison de schéma, afin qu'a aucun moment l'objet encapsulant soit pris en défaut.

    Ceci est obligatoire dans un certain nombre de cas, comme la créations de vues indexées.

    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. Erreur 1064 sur CREATE FUNCTION
    Par Franck_Pal dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 24/08/2007, 09h19
  2. TOAD test CREATE FUNCTION
    Par magic charly dans le forum Toad
    Réponses: 6
    Dernier message: 24/01/2007, 10h59
  3. Creat Function => problème de sauvegarde
    Par popin dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 16/11/2006, 15h54
  4. CREATE FUNCTION
    Par zut94 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/11/2005, 16h53
  5. Create function sous condition
    Par nbl dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/05/2005, 12h00

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