Problemas con rendimiento del parámetro de valor de tabla

No sé si esto es un problema con la forma en que los uso o con la implementación de Microsoft, pero los parámetros de valor de tabla de SQL 2008 son extremadamente lentos.

Generalmente si necesito usar un TVP es porque tengo muchos registros; actualmente parecen ser inusualmente lentos para algo más que la menor cantidad de registros.

Los llamo en .Net así:

// get the data
DataTable data = GetData();

com.CommandText = "sprocName"

// create the table-value parameter
var tvp = com.Parameters.AddWithValue("data", data);
tvp.SqlDbType = SqlDbType.Structured;

com.ExecuteNonQuery();

Ejecuté el generador de perfiles para ver por qué, y la declaración SQL real es algo como esto:

declare @data table ...

insert into @data ( ... fields ... ) values ( ... values ... )
-- for each row
insert into @data ( ... fields ... ) values ( ... values ... )

sprocName(@data)

Sin embargo, esa es una forma muy lenta de hacerlo. Sería mucho más rápido si hiciera esto en su lugar:

insert into @data ( ... fields ... ) 
values ( ... values ... ),
       ( ... values ... ),
       -- for each row
       ( ... values ... )

No estoy seguro de por qué no está utilizando la sintaxis más nueva y mucho más rápida. O incluso lo que sea que haga bajo el capó conSqlBulkCopy.

a nueva sintaxis se agregó en SQL 2008, pero también lo están los TVP (creo).

¿Hay alguna opción para que haga esto? ¿O algo que me estoy perdiendo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta