2009-04-10 10 views
5
  1. Tengo un procedimiento almacenado TSQL tsql__sp__A, que hace dos cosas:

(a) crea una tabla temporal #temptable que tiene datos seleccionar de una consulta SELECT compleja.El acceso a TSQL creó tablas #temp del procedimiento almacenado CLR. ¿Es posible?

(b) Llama a un Procedimiento almacenado administrado por CLR clr__sp__B por cada fila que hace cálculos en los parámetros de fila.

Pregunta: ¿Es posible acceder a la #temptable del procedimiento CLR clr__sp__B utilizando el mismo contexto de conexión? (No, no quiero moverme o crear otro #tempTable dentro del procedimiento administrado)

Gracias.

Respuesta

0

Podemos definir dos tipos de tablas temporales en SQL.

  • locales
  • mundial

Sobre tablas temporales locales:

Cuando la mesa está precedida por un solo signo '#', que se define como tabla temporal local y su alcance es limitado a la sesión en la que se crea.

Y sobre tablas temporales globales:

A diferencia de las tablas temporales locales, las tablas temporales globales son visibles en toda instancia.

Debería intentar usar "##" para crear una tabla global global. (Si hay una diferencia entre "contexto de conexión" y "sesión")

+0

Gracias. Sí, tengo tablas temporales globales (##) como última opción, pero me preguntaba si hay una forma de pasar el contexto actual de sesión/conexión de TSQL al administrador CLR. –

+0

Huh, buena pregunta. ¿Pero qué pasa con la inversión de llamadas? Quiero decir que creas un procedimiento almacenado "envoltorio" almacenado, y ese procedimiento llama a tsql__sp__A y luego clr__sp__B. O bien, reescribe clr__sp__B para llamar primero a tsql__sp__A. – boj

2

Gracias Boj.

Sin embargo he encontrado que cuando se utiliza con un "conexiones de contexto = true" Esto abre todo el conjunto

Read Bol Article

// La conexión de contexto le permite ejecutar sentencias SQL en el mismo contexto que su el código fue invocado en primer lugar //

using (SqlConnection connection = new SqlConnection("context connection=true")) 
{ 
    connection.Open(); 
    // access #temp table 
} 
Cuestiones relacionadas