jueves, 4 de abril de 2013

IF EXISTS, Verificar Si Una Tabla Temporal Existe SQL Server

IF EXISTS, Verificar Si Una Tabla Temporal Existe en SQL Server

Artículo original: http://sqlservercodebook.blogspot.com/2008/03/check-if-temporary-table-exists.html
Traducido por: Alfredo Arias

Verificar Si Una Tabla Temporal Existe

¿Como verifico si una tabla temporal existe tanto a nivel local como a nivel global en SQL Server? Para hacerlo puedes usar IF EXISTS

 
IF OBJECT_ID('tempdb..#temp') IS NOT NULL  
¡Veamos como funciona!
 -- Cambiamos el contexto al de nuestra base de datos de ejemplo  
 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 parametro 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  
 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.