Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/05/2011, 21h28   #1
Invité régulier
 
Inscription : octobre 2009
Messages : 89
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 89
Points : 6
Points : 6
Par défaut Tableau int T-SQL

Bonjour

dans un code c# j'ai un Array 1 dimension composé d'Int , qui contient a chaque fois un ID , pour chaque indice du tableau je veut connaitre un " resultat " grâce à l'ID "

alors pour le moment je fais une boucle qui va a chaque fois appeler la procédure stockée

pour chaque ID dans array
{
appel procédure
getesultat avec parameters ID indice i
}

je trouve ça un peu bourrin , donc j'aimerais savoir si c'est possible d'envoyer directement le tableau , et ensuite en T-SQL stored proc , renvoie tout les ID dans l'odre

Merci
digofwall est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 22h20   #2
Membre éprouvé
 
Homme Hamid MIRA
Ingénieur développement logiciels
Inscription : septembre 2003
Messages : 177
Détails du profil
Informations personnelles :
Nom : Homme Hamid MIRA
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2003
Messages : 177
Points : 413
Points : 413
Depuis SQL Server 2008, il existe la notion «Paramètres table».

Les paramètres table sont déclarés en utilisant des types table préalablement définis par l'utilisateur.

Tu pourras ainsi utiliser des paramètres table pour envoyer plusieurs lignes de données à une procédure stockée ou une fonction, et ce, sans créer ni table temporaire (du moins explicite !) ni de nombreux paramètres.

Ci-dessous un lien qui explique cette nouvelle fonctionnalité (paramètre table) de SQL Server 2008 :
http://msdn.microsoft.com/fr-fr/library/bb510489.aspx


PS : Sa mise en œuvre en C# est par ailleurs très simple.

A+
hmira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 10h52   #3
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 668
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 668
Points : 8 718
Points : 8 718
Bonjour,

Je ne suis pas vraiment d'accord avec cette approche.
En effet, pour une variable de type table, SQL Server ne maintient aucune statistique de colonne, et il estimera toujours qu'il n'y a qu'une seule ligne dans la variable de type table, ce qui est bien souvent faux.
Cela le conduit parfois à sous-estimer les cardinalités, et donc à produire des plans de requête sous-optimaux.

Il vaudrait mieux réutiliser la requête qui produit les ID pour écrire une procédure stockée qui calcule un résultat à partir ce ceux-ci.

S'il s'agit d'une sous-ensemble d'IDs de l'ensemble "source" (par exemple on produit une liste d’éléments et l'utilisateur a le choix d'en sélectionner quelques uns pour voir leurs caractéristiques), on peut stocker les ID de ce nouveau sous-ensemble dans une table utilisateur, avec un identifiant unique généré à l'exécution pour éviter les collisions pour deux exécutions concurrentes.

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 12h06   #4
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Citation:
Envoyé par elsuket Voir le message
S'il s'agit d'une sous-ensemble d'IDs de l'ensemble "source" (par exemple on produit une liste d’éléments et l'utilisateur a le choix d'en sélectionner quelques uns pour voir leurs caractéristiques), on peut stocker les ID de ce nouveau sous-ensemble dans une table utilisateur, avec un identifiant unique généré à l'exécution pour éviter les collisions pour deux exécutions concurrentes.
@++
Non seulement j'approuve, et j'ai mise en prod de nombreuses fois ce procédé et je vous conseille pour l'identifiant transactionnel d'utiliser un GUID et de prévoir un nettoyage des lignes après utilisation (et une table parfaitement indexée)

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 12h23   #5
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 668
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 668
Points : 8 718
Points : 8 718
C'est exactement ce que je fais pour l'application sur laquelle je travaille.
La table qui gère cela reçoit énormément d'INSERT (donc autant de DELETE).
Les clients ne s'en sont jamais plaint en plus d'un an ...

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 21h17   #6
Membre éprouvé
 
Homme Hamid MIRA
Ingénieur développement logiciels
Inscription : septembre 2003
Messages : 177
Détails du profil
Informations personnelles :
Nom : Homme Hamid MIRA
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2003
Messages : 177
Points : 413
Points : 413
Même si je ne suis pas à l'origine du topic, tu tiens à vous remercier pour ce complément d'info.

Donc si je comprend bien, les ingénieurs de chez MicroSoft auraient du s'abstenir de proposer à partir de SQL Server 2008 cette nouvelle fonctionnalité «Table-Valued Parameters »

Ou bien existe t-il des cas d'utilisation simple où on peut considérer que les Table-Valued Parameters peuvent être utilisées sans porter préjudices aux performances. Je pense notamment à une procédure qui dans la pratique ne recoit que quelques dizaines (10, 20 ou 100) de paramètre, c.à.d une Table-Valued Parameters de 100 lignes maximum ?

A+
hmira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 08h23   #7
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
Même si je ne suis pas à l'origine du topic, tu tiens à vous remercier pour ce complément d'info.

Donc si je comprend bien, les ingénieurs de chez MicroSoft auraient du s'abstenir de proposer à partir de SQL Server 2008 cette nouvelle fonctionnalité «Table-Valued Parameters »

Ou bien existe t-il des cas d'utilisation simple où on peut considérer que les Table-Valued Parameters peuvent être utilisées sans porter préjudices aux performances. Je pense notamment à une procédure qui dans la pratique ne recoit que quelques dizaines (10, 20 ou 100) de paramètre, c.à.d une Table-Valued Parameters de 100 lignes maximum ?

A+
Les TVP n'ont jamais eu vocation à faire autre chose que contenir de petits échantillons de données... come Microsoft le précise sur son MSDN (max 1000 lignes)...

Elles sont souvent utilisées lors d'INSERT/UPDATE/DELETE
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 12h33   #8
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 668
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 668
Points : 8 718
Points : 8 718
Pour ma part j'aurai mis 10 lignes, pas plus.
Mais cela dépend de la sélectivité des valeurs de votre table, des jointures que vous effectuez sur une variable de type TABLE, ...

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 09h02   #9
Rédacteur/Modérateur

 
Avatar de WOLO Laurent
 
Homme Laurent WOLO
Architecte de base de données
Inscription : mars 2003
Messages : 2 696
Détails du profil
Informations personnelles :
Nom : Homme Laurent WOLO
Âge : 35
Localisation : Congo-Brazzaville

Informations professionnelles :
Activité : Architecte de base de données
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 2 696
Points : 3 917
Points : 3 917
Envoyer un message via Yahoo à WOLO Laurent
Une fois de plus, il faut faire attention avec la publicité, mais je conseillerais de tester en fonction de votre cas, la meilleur méthode par vous même.
__________________

Découvrez la FAQ de MS SQL Server.
La chance accorde ses faveurs aux esprits avertis !
WOLO Laurent est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h26.


 
 
 
 
Partenaires

Hébergement Web