J'ai une grande variable de type de table définie par l'utilisateur qui a 129 colonnes. Je vais stocker environ 2000 à 3000 enregistrements dans cette variable de table à la fois et les transmettre à diverses procédures et fonctions stockées pour obtenir des données supplémentaires et apporter des modifications. Ces données supplémentaires et nouvelles modifications seront ensuite stockées dans une nouvelle variable de table du même type et retournées à la procédure stockée source via un OUTPUT
paramètre. (En effet, un paramètre de type de table ne peut être transmis qu'en tant que READONLY
.)
Voici mon pseudo-code:
SP1
@tmp tableType
{
INSERT @tmp EXEC
SP2 (@tmp)
INSERT @tmp EXEC
SP3 (@tmp)
}
Dois-je utiliser un @table_variable
ou #temp_table
?
sql-server
sql-server-2008
performance
Sreekumar P
la source
la source
Réponses:
Il y a deux blogs à consulter. La première ( ici ) est une comparaison des variables de table et des tables temporaires. Il date de 2008 et reste pertinent pour SQL Server 2008 R2.
La deuxième entrée de blog ( ici ) traite de certaines des idées fausses (conceptions manquées) concernant les variables de tableau; y compris l'indexation d'une variable de table.
Ces deux articles de blog, articles, sont écrits par Gail Shaw.
Je crois que le seul élément révélateur que vous recherchez est qu'une variable de table ne peut pas être transmise entre des procédures stockées alors qu'une table temporaire peut être transmise entre des procédures stockées. La variable de table la plus proche à passer entre les procédures stockées est un type de table défini par l'utilisateur.
La transmission d'une variable de table en tant que TVP à une procédure stockée nécessite qu'elle soit définie comme paramètre en lecture seule. Cela implique qu'il y aura plusieurs copies de la variable de table si vous souhaitez en renvoyer une copie modifiée.
Tout compte fait, le passage entre des procédures stockées peut être mieux servi par une table temporaire lorsque vous souhaitez renvoyer la structure transmise avec des valeurs mises à jour.
la source
Rien de mieux que d'essayer les deux, mais je trouve que #tempTables fonctionne mieux une fois que vous entrez dans les centaines d'enregistrements.
la source