2011-04-13 23 views
88

Tengo una variable de tabla en una secuencia de comandos (no es un procedimiento almacenado). Dos preguntas:¿Cómo elimino las variables de tabla en SQL-Server? ¿Debería incluso hacer esto?

  1. ¿Cómo puedo soltar la variable de tabla? Drop Table @varName da un error "Incorrecto snytax".
  2. ¿Debo siempre hacer esto? Escuché que es una buena práctica. ¿Alguna vez es realmente necesario para pequeños guiones como este?

Aquí está mi código:

Declare @projectList table(
    name varchar(40) NOT NULL); 

Insert Into @projectList 
Values ('BCR-00021') 

Select * 
From @projectList 

Drop Table @projectList -- does not work 
+0

Puede no soltarlos a sí mismo por lo la segunda parte de su pregunta no se aplica. –

Respuesta

136

variables de tabla son automáticamente local y eliminan automáticamente - usted no tiene que preocuparse por ello.

+14

+1 - También ** no puede ** soltarlos, incluso si quisiera, persisten siempre que la sesión esté abierta, al igual que cualquier otra variable. Tampoco se ven afectados por las transacciones. – JNK

+8

@JNKs señala que no se ven afectados por las transacciones es importante, puede usar variables de tabla para guardar datos y escribir en una tabla de registro después de que un error cause una reversión. – HLGEM

+0

Genial, eso funciona. ¿Es esto lo mismo para #tempTables? – jtpereyda

27

Las variables de tabla son como variables int o varchar.

No es necesario que los suelte. Tienen las mismas reglas scope como int o varchar las variables

El ámbito de una variable es la gama de instrucciones de Transact-SQL que pueden hacer referencia a la variable. El alcance de una variable dura desde el punto en que se declara hasta el final del lote o el procedimiento almacenado en el que se declara.

3

Al igual que TempTables, una variable de tabla local también se crea en TempDB. El alcance de la variable de tabla es el lote, el procedimiento almacenado y el bloque de instrucción en el que se declara. Se pueden pasar como parámetros entre procedimientos. Se eliminan automáticamente cuando cierra la sesión en la que los creó.

+0

#temp table is not al igual que la variable @table, no se cae automáticamente después del final del parche o el alcance, se elimina automáticamente solo si se creó dentro del procedimiento almacenado y el procedimiento almacenado terminó de ejecutarse –

3

Pero todos olvidaron mencionar, que si se usa una tabla de variables dentro de un bucle, deberá vaciarse (borrar @table) antes de volver a cargar los datos en un bucle.

3

si alguien viene a través de este ... y realmente se necesita para dejarla caer como mientras que en un bucle, sólo tiene que borrar todos de la variable de tabla:

DELETE FROM @tableVariableName 
Cuestiones relacionadas