SQL SERVER : TABLA TEMPORAL


TABLA LOCAL CON ALCANCE LOCAL

 USE Norhtwind
 GO

 -- Creamos una tabla temporal dentro de esta

 CREATE TABLE #temp(id INT)
 -- Verificamos si nuestra tabla existe
 IF OBJECT_ID('tempdb..#temp') IS NOT NULL
   BEGIN
    PRINT '¡#temp existe!'
   END
 ELSE
   BEGIN
    PRINT '¡#temp does not exist!'
   END

 -- Otra forma de verificar si esta tabla existe es utilizando un segundo parámetro opcional no documentado

 IF OBJECT_ID('tempdb..#temp','u') IS NOT NULL
   BEGIN
    PRINT '¡#temp existe!'
   END
 ELSE
   BEGIN
    PRINT '¡#temp no existe!'
   END

 -- No hagas esto porque esto verificara la base de datos  local y por lo tanto retornara no existe   

 IF OBJECT_ID('tempdb..#temp','local') IS NOT NULL
   BEGIN
    PRINT '¡#temp existe!'
   END
 ELSE
   BEGIN
    PRINT '¡#temp no existe!'
   END

 -- A menos que cambiemos el contexto de la  base de datos a algo como esto

 USE tempdb
 GO
 -- Ahora la tabla existe de nuevo
 IF OBJECT_ID('tempdb..#temp','local') IS NOT NULL
   BEGIN
    PRINT '¡#temp exists!'
   END
 ELSE
   BEGIN
    PRINT '¡#temp no existe!'
   END
 -- Volvamos a Norhtwind de nuevo
 USE Norhtwind
 GO
 -- Verificamos si la tabla temporal existe
 IF OBJECT_ID('tempdb..#temp') IS NOT NULL
   BEGIN
    PRINT '¡#temp exists!'
   END
 ELSE
   BEGIN
    PRINT '¡#temp does not exist!'
   END

-- Ahora abre una nueva ventana del Analizador de Consultas (Query Analyzer) (CTRL + N) y -- ejecuta este código de nuevo.  Verificar si existe

 IF OBJECT_ID('tempdb..#temp') IS NOT NULL
   BEGIN
    PRINT '¡#temp existe!'
   END
 ELSE
   BEGIN
    PRINT '¡#temp no existe!'
   END

 -- La tabla no existe y es correcto ya que esta es una tabla temporal de alcance local, no una tabla temporal de alcance global.  
 Probemos ahora esta otra sentencia.  
 -- Crea una tabla temporal de alcance global  
 -- Note los 2 signos de número, esto crea la tabla a nivel global

TABLA LOCAL CON ALCANCE GLOBAL


 CREATE TABLE ##temp(id INT)
 -- Verifica si esta existe
 IF OBJECT_ID('tempdb..##temp') IS NOT NULL
   BEGIN
    PRINT '¡##temp existe!'
   END
 ELSE
   BEGIN
    PRINT '¡##temp no existe!'
 END
 [/sql]

-- Existe, correcto?
-- Ahora ejecutamos el mismo código en una ventana nueva del Analizador de consultas (Query Analyzer) (CTRL + N).
 -- Verificamos si existe

 IF OBJECT_ID('tempdb..##temp') IS NOT NULL
   BEGIN
    PRINT '¡##temp existe!'
   END
 ELSE
   BEGIN
    PRINT '¡##temp no existe!'
   END

-- Y si esta esta vez existe ya que esta es una tabla de alcance global.

Ejemplo : Comprobar si la tabla temporal existe y eliminar si es que existe antes de crear una tabla temporal


IF OBJECT_ID('tempdb..#Results') IS NOT NULL
    DROP TABLE #Results

CREATE TABLE #Results
(
    Company             CHAR(3),
    StepId              TINYINT,  
    FieldId             TINYINT,
)

select company, stepid, fieldid from #Results

Comentarios

Entradas populares de este blog

Para que sirve la N en SQL Server

MYSQL : CURSORES

SQL SERVER : EJECUTAR UN PAQUETE SSIS