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 :

Index sur vue contenant une fonction


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2002
    Messages : 57
    Par défaut Index sur vue contenant une fonction
    Bonjour,

    J'ai le message d'erreur suivant lorsque je veux créer un index sur une vue contenant une fonction scalaire :
    Impossible de créer index dans la vue "basename.dbo.mavue", car la fonction "dbo.mafonction" référencée par la vue permet uniquement l'accès aux données par l'utilisateur ou le système. (Microsoft SQL Server, Erreur*: 10133)
    la vue et la fonction sont créées avec WITH SCHEMABINDING

    Pouvez-vous m'aider ?

  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
    Postez le DDL de la vue et de la fonction.

    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 confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2002
    Messages : 57
    Par défaut
    Bonjour,

    Voici :
    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
     
    CREATE function [dbo].[fn_Taf_GetLastAction2] (@demande int)
    RETURNS INT
    WITH SCHEMABINDING
    AS
    BEGIN
    	DECLARE @I INT
     
    	SET @I=(SELECT MAX(act_id) from dbo.taf_action 
    	inner join dbo.taf_type_action on tac_code=act_action 
    	where act_demande=@demande and tac_majstatut=1 
    	and act_dt=(SELECT MAX(act_dt) 
    		from dbo.taf_action 
    		inner join dbo.taf_type_action on tac_code=act_action 
    		where act_demande=@demande and tac_majstatut=1)
    	)
        RETURN(@I)
    END
     
    create view [dbo].[v_taf_demande]
    with SCHEMABINDING
    as
    select dem_id, act_id, act_action, dbo.fn_Taf_GetLastPlanification(dem_id) dem_lastplanif 
    from dbo.taf_demande
    inner join dbo.taf_action on act_id=dbo.fn_Taf_GetLastAction2(dem_id)

  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
    Une vue indexée ne peut pas avoir de sous requête. Or votre UDF contient une requête. L'appel de cet UDF dans une requête est une sous requête.

    Tentez de réintégrer le code SQL de votre UDF dans la requête principale et sans sous requêtes (avec des jointures).

    Cela dit, il n'y a aucun intérêt à faire dune vue indexée dans votre cas. Le gain serait quasi null.

    L'intérêt des vues indexées est de précalculer notamment des agrégats, afin d'éviter de scruter des millions de lignes ou encore de réduire des jointures très distantes.

    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 confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2002
    Messages : 57
    Par défaut
    Ok, merci pour votre réponse rapide.
    Dans mon cas, je souhaite (très souvent dans l'appli) filtrer sur la dernière action qui a eu lieu.
    Faut-il mieux que je dénormalise ? (Avec trigger pour mise à jour et index dessus)

  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
    Une requête bien faite et un bon index suffira largement. Sauf si vous avez plusieurs centaines de millions de lignes et une cardinalité des différentes actions d'un même groupe très importantes.

    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/ * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher une vue contenant une image au format postscript *.eps
    Par pobsteta dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 21/11/2007, 10h11
  2. [AJAX] Appel d'un fichier php contenant une fonction javascript.
    Par Empty_body dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 19/08/2007, 21h16
  3. Passer chaîne contenant ' à une fonction
    Par webrider dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/03/2007, 13h50
  4. [Sql] index sur vue
    Par fxp17 dans le forum Oracle
    Réponses: 8
    Dernier message: 23/02/2006, 10h56
  5. Aide sur modification d' une fonction.
    Par superadnan3 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/01/2006, 17h29

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