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

Accès aux données Discussion :

DataTable en paramètre d'une procédure stockée


Sujet :

Accès aux données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 39
    Points : 29
    Points
    29
    Par défaut DataTable en paramètre d'une procédure stockée
    Bonjour,
    Je travaille sous VS 2010 et SQL Serveur2008.
    J'ai une table dans ma base de données nommée : "TAB_IND". Cette table contient des colonnes ID, Col1, Col2 et Col3. Initialement la valeur de Col3 est nulle.
    • A l'aide d'un DataTable du côté Dot net(C sharp), je récupère toutes les données de TAB_IND pour lesquelles Col3 est nulle
    • Col3 est calculée en fonction de Col1 et de Col2
    • Les calculs qui permettent de renseigner col3 s'effectuent uniquement côté Dot net (Appel à plusieurs web service). Impossible de calculer Col3 côté SQL.
    • A la fin des calculs, j'ai côté Dot net un DataTable contenant des centaines voire milliers de données (ID, Col1,Col2,Col3) avec Col3 renseignée.


    Question:
    Comment puis-je passer ce DataTable comme paramètre à une procédure stockée pour aller mettre Col3 de "TAB_IND" à jour?
    J'ai un peu regardé sur le google, je pense que la possibilité d'utiliser un paramètre de type Table (possible sous SQL 2008) n'est pas indiquée dans mon cas (à moins que je n'ai pas bien compris la méthode!?!?).
    Une autre idée serait peut-être:
    • passer en paramètre la DataTable sous forme d'un varchar(max) (comment transformer le DataTable en varchar(max)?)
    • utiliser 2 curseurs imbriqués: le premier lit la ligne et le second lit les valeurs de la ligne et les affecte dans une table temporaire (Quelle serait la syntaxe?)
    • A l'aide d'une jointure de la TAB_IND sur la table temporaire, mettre Col3 à jour

    Cette solution n'est-elle pas assez "lourde"? Sinon, comment la mettrait-on en place?
    Pour toute question complémentaire, je suis à votre disposition.
    Merci d'avance pour toute aide.
    Maren

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Bonjour,

    Citation Envoyé par Maren00 Voir le message
    Je travaille sous VS 2010 et SQL Serveur2008. [*]Les calculs qui permettent de renseigner col3 s'effectuent uniquement côté Dot net (Appel à plusieurs web service). Impossible de calculer Col3 côté SQL....
    Ca ce n'est pas exact, mais ce n'est pas la question ici.

    Comment puis-je passer ce DataTable comme paramètre à une procédure stockée pour aller mettre Col3 de "TAB_IND" à jour?
    On ne peut pas passer une DataTable (objet spécifiquement .NET) comme paramètre à une proc stoc (sauf erreur de ma part).

    EDIT : c'est faux. cf. infra

    J'ai un peu regardé sur le google, je pense que la possibilité d'utiliser un paramètre de type Table (possible sous SQL 2008)
    En effet, il s'agit des CTE; Mais DataTable != CTE.

    A ta place, j'utiliserais plutôt une table temporaire : tu "dump" ta datatable dans une table temporaire (tu as juste besoin de PK + COL3) et ta proc stoc exploite cette table temporaire.

    Je pense que c'est de très loin le plus simple

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Bonjour et merci pour ta réaction,
    je suis tout à fait d'accord avec toi que je n'ai besoin que de ID et Col3 dans la table.
    Par rapport à ta sugestion :
    (...A ta place, j'utiliserais plutôt une table temporaire : tu "dump" ta datatable dans une table temporaire...),
    je n'ai aucune idée comment m'y prendre. Comment puis-je "dump" ma datatable dans une table temporaire? Y a t il un lien où je peux avoir l'info?

    Merci

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Bon, il s'avére que j'ai écrit une grosse connerie et qu'on peut parfaitement passer une DataTable à une PS (avec SQL Server 2008).

    Ici une discussion à ce sujet :

    http://stackoverflow.com/questions/9...database-table

    Désolé

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Merci pour le lien,

    En suivant les instructions qui y sont mentionnées, j'ai pu résoudre mon pb plus facilement.
    Je pense que c'est la solution la plus adaptée.

    Merci beaucoup.

  6. #6
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    En effet, il s'agit des CTE;
    Non CTE=Common Table Expression utilisé en T-SQL via le mot clé WITH, permettant entre autre d'effectuer des requètes récursives.

    Pour le cas de passer des types tables à une Procédure Stockée il s'agit des TVP (Table Valued Parameters).

    Attention à ne pas abuser des TVP (comme de toutes les bonnes choses :-)).

    SQL SERVER ne maintient pas de statistiques sur ces variables tables, c'est pourquoi MS préconise de ne pas dépasser 1000 enregistrements dans ces "tables".
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  7. #7
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Une autre solution serait de générer un fichier plat avec vos données générées puis de l'importer dans une table via BULK INSERT ou BCP.exe.
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  8. #8
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Les calculs qui permettent de renseigner col3 s'effectuent uniquement côté Dot net
    Vous pouvez tenter de passer par une procédure stockée CLR (c'était l'idée de Bluedeep je suppose).
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 09/12/2008, 10h04
  2. Réponses: 2
    Dernier message: 27/06/2006, 15h21
  3. Réponses: 4
    Dernier message: 14/02/2006, 15h33
  4. Passer le nom de colonne en paramètre d'une procédure stocké
    Par theartist dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/01/2005, 15h39
  5. Un fichier .bmp comme paramètre d'une Procédure stockée
    Par FONKOU dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/10/2004, 17h56

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