@table_variable o #temp_table


11

Tengo una gran variable de tipo de tabla definida por el usuario que tiene 129 columnas. Almacenaré alrededor de 2000-3000 registros en esta variable de tabla a la vez y los pasaré a varios procedimientos y funciones almacenados para obtener datos adicionales y realizar modificaciones. Estos datos adicionales y las nuevas modificaciones se almacenarán en una nueva variable de tabla del mismo tipo y se devolverán al procedimiento almacenado de origen a través de un OUTPUTparámetro. (Esto se debe a que un parámetro de tipo de tabla solo se puede pasar como READONLY).

Este es mi pseudocódigo:

  SP1
  @tmp tableType
  {
        INSERT @tmp EXEC
        SP2 (@tmp)

        INSERT @tmp EXEC
        SP3 (@tmp)
  }

¿Debo usar un @table_variableo #temp_table?


Respuestas:


12

Hay dos blogs que debes mirar. El primero ( aquí ) es una comparación de variables de tabla y tablas temporales. Es de 2008 y sigue siendo relevante para SQL Server 2008 R2.

La segunda entrada del blog ( aquí ) trata algunos de los conceptos erróneos (conceptos perdidos) con respecto a las variables de tabla; incluida la indexación de una variable de tabla.

Ambas entradas de blog, artículos, están escritos por Gail Shaw.

Creo que el único elemento revelador que está buscando es una variable de tabla que no se puede pasar entre los procedimientos almacenados, mientras que una tabla temporal se puede pasar entre los procedimientos almacenados. Lo más parecido a una variable de tabla para pasar entre procedimientos almacenados es como un tipo de tabla definida por el usuario.

Pasar una variable de tabla como TVP a un procedimiento almacenado tiene el requisito de que debe definirse como un parámetro de SOLO LECTURA. Esto implica que habrá múltiples copias de la Variable de tabla si desea devolver una copia modificada de la misma.

En total, el paso entre el procedimiento almacenado puede ser mejor atendido por una tabla temporal cuando desea devolver la estructura pasada con valores actualizados.


5

Nada mejor que probar ambos, pero encuentro que #tempTables funciona mejor una vez que ingresas a los cientos de registros.


3
Agregue a eso el hecho de que las tablas temporales pueden tener índices, tener estadísticas, mientras que las variables de la tabla solo pueden tener un PK. Tienes algunos detalles aquí .
Marian
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.