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

MS SQL Server Discussion :

[SQL Server 2005] Question sur proc stoc


Sujet :

MS SQL Server

  1. #1
    Membre actif Avatar de quanou
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 311
    Points : 247
    Points
    247
    Par défaut [SQL Server 2005] Question sur proc stoc
    salut tlm,
    J'ai une proc stoc dont la clause Where est la suivante :
    WHERE
    (TeCalendrier.inAnnee = @inAnneeInf) AND
    (TeCalendrier.inSemaine BETWEEN @inSemaineInf AND @inSemaineSup) AND
    (TeTempsEffectif.CEinProjet IN (SELECT * FROM Split(@CodesProjet,';'))) AND
    (TeTempsEffectif.CEinProjet is not null) AND
    (TeTempsEffectif.CEchSalarie IN (SELECT Item FROM Split(@CodesSalarie,';')))
    @CodesProjet prend comme valeur la chaîne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    13;14;15;8;2;1;7;4;5;3;9;10;11;12;19;20;22;24;23;25;6;18;16;21;17
    Et je me suis aperçu que le résultat ne prenait en compte qu'une vingtaine de codes projet. Tous les résultats à partir du code 24 inclus ne sortent pas !
    J'ai donc supprimé quelques codes du début de chaine pour voir, et effectivement, ça confirme : soit la requête est trop longue, soit la chaîne du IN est trop longue. A moins que ce soit une limite de la fonction Split ?
    Bizarrement, ça ne me met aucun message.

    Auriez vous une explication, et une solution de contournement ? Merci
    J'espère avoir été clair dans mes explications

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Peut-on voir le code de votre fonction Split ?

    @++

  3. #3
    Membre actif Avatar de quanou
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 311
    Points : 247
    Points
    247
    Par défaut
    Ah oui, pardon
    Le 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
    26
    27
    28
    29
    30
    31
    32
    33
    ALTER FUNCTION [dbo].[Split]
    (
    	@ItemList NVARCHAR(4000), 
    	@delimiter CHAR(1)
    )
    RETURNS @IDTable TABLE (Item VARCHAR(50) COLLATE French_CI_AS)  
    AS      
     
    BEGIN    
    	DECLARE @tempItemList NVARCHAR(4000)
    	SET @tempItemList = @ItemList
     
    	DECLARE @i INT    
    	DECLARE @Item NVARCHAR(4000)
     
    	SET @tempItemList = REPLACE (@tempItemList, ' ', '')
    	SET @i = CHARINDEX(@delimiter, @tempItemList)
     
    	WHILE (LEN(@tempItemList) > 0)
    	BEGIN
    		IF @i = 0
    			SET @Item = @tempItemList
    		ELSE
    			SET @Item = LEFT(@tempItemList, @i - 1)
    		INSERT INTO @IDTable(Item) VALUES(@Item)
    		IF @i = 0
    			SET @tempItemList = ''
    		ELSE
    			SET @tempItemList = RIGHT(@tempItemList, LEN(@tempItemList) - @i)
    		SET @i = CHARINDEX(@delimiter, @tempItemList)
    	END 
    	RETURN
    END

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Votre fonction fonctionne correctement.
    Avez-vous regardé les valeurs qui sont dans la colonne TeTempsEffectif.CEinProjet ?

    @++

  5. #5
    Membre actif Avatar de quanou
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 311
    Points : 247
    Points
    247
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Bonjour,

    Votre fonction fonctionne correctement.
    Avez-vous regardé les valeurs qui sont dans la colonne TeTempsEffectif.CEinProjet ?

    @++
    On peut se tutoyer, je suis pas si vieux que ça quand-même

    Les valeurs sont OK. En fait, si je limite le nombre de codes projet (@CodesProjet), ex. je fais 2 requêtes, l'une avec les codes du début et l'autre avec les codes de la fin, les résultats sortent bien...
    Je me demande si c'est pas limité en longueur pour la clause IN.
    Merci de t'intéresser à mon problème en tout cas

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    On peut se tutoyer, je suis pas si vieux que ça quand-même
    Figures toi que moi non plus, mon âge est dans mon profil, pure politesse de ma part

    Je me demande si c'est pas limité en longueur pour la clause IN.
    ça c'est clair que non.
    Pourquoi ne pas faire une jointure sur la fonction ?

    @++

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 862
    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 862
    Points : 53 008
    Points
    53 008
    Billets dans le blog
    6
    Par défaut
    Il faut utiliser un CROSS APPLY ou OUTER APPLY pour faire une jointure de la fonction avec la table.

    A +

  8. #8
    Membre actif Avatar de quanou
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 311
    Points : 247
    Points
    247
    Par défaut
    Merci, mon souci est toujours là, pas encore eu le temps de m'y pencher sérieusement, car d'autres priorités...
    Merci pour les pistes, je reviendrai donner des nouvelles

Discussions similaires

  1. Sql Server 2005 : Question sur l'installation
    Par fred_04510 dans le forum Administration
    Réponses: 9
    Dernier message: 11/10/2010, 15h33
  2. [SQL Server 2005] question sur les bit
    Par xeak2008 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 07/10/2008, 17h08
  3. Réponses: 4
    Dernier message: 03/03/2008, 10h00
  4. [SQL Server 2005] Questions sur les droits
    Par Reskibil dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 18/10/2007, 16h56
  5. [SQL-SERVER 2000] Question sur le WaitFor
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/04/2006, 12h10

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