Tablas Temporales

Tablas Temporales

Las tablas temporales en SQL Server son utilizadas para almacenar cálculos intermedios en transacciones que requieren de grandes cantidades de datos para ser manejados mas eficientemente que con variables. Las tablas temporales se almacenan en la base de datos Tempdb.

Las tablas temporales son de dos tipos:

  • Temporales locales: Las tablas temporales locales incluyen en el nombre el símbolo # como primer carácter. Se crean por cada usuario conectado y la tabla se elimina automáticamente cuando el usuario termina la sesión.
  • Temporales globales: Las tablas temporales globales inician con dos símbolos ## en el nombre y son visibles por todos los usuarios conectados al servidor.  Al desconectarse todos los usuarios, la tabla temporal global se elimina automáticamente.

Para información de crear tablas ver Tablas

Consideraciones para el trabajo con tablas temporales:

  • No se pueden usar Foreign key
  • Las tablas temporales se almacenan en la base de datos del sistema Tempdb
  • Una tabla temporal creada en un SP sólo está presente cuando se completa las transacciones del procedimiento almacenado
  • Las tablas temporales locales se pueden crear con el mismo nombre para diferentes usuarios, SQL Server le incluye un sufijo para diferenciarlas.
  • Los dos tipos de tablas se pueden quitar usando Drop Table.

Ejercicios

1. Para ver las tablas temporales por cada usuario, vamos a crear los inicios de sesión Gerente y Vendedor. Más información Ver Inicios de sesión 

Use master
go
Create login Gerente WITH PASSWORD=’123′
go

— Agregarlo a sysadmin (no hacerlo en la parte real)

Alter server role sysadmin Add member Gerente
go

— Vendedor

Create login Vendedor WITH PASSWORD=’123′
go

— Agregarlo a sysadmin

Alter server role sysadmin Add member Vendedor
go

2. Iniciar sesión con Gerente y crear una tabla temporal Prueba




El siguiente código se escribirá estando conectado como Gerente.

Usando Northwind

Use Northwind
go

Create table #Prueba
(Codigo nchar(4), Descripcion nvarchar(20),
constraint PruebaPK primary key (Codigo))
go
— Insertar registros
insert into #Prueba values (‘9867′,’Tablas Gerente’),
(‘7499′,’Datos Gerente’),(‘7684′,’Medios Gerente’)
go
— Visualizar los datos.
select * from #Prueba
go

 

3. Iniciar sesión con Vendedor y crear una tabla temporal Prueba

El siguiente código se escribirá estando conectado como Vendedor

Usando Northwind

Use Northwind
go

Create table #Prueba
(Codigo nchar(4), Descripcion nvarchar(20),
constraint PruebaPKV primary key (Codigo))
go
— Insertar registros
insert into #Prueba values (‘4578′,’Vendedor Dato1’),
(‘5892′,’Vendedor Ingreso’),(‘7900′,’Ultimo de Vendedor’)
go
— Visualizar los datos.
select * from #Prueba
go

Se puede comprobar que existen dos tablas #Prueba, la imagen siguiente las muestra.

SQL Server les incluye un sufijo para cada usuario.

 

4. Crear una tabla temporal Global, esta la puede crear cualquier inicio que tenga permisos.

Create table ##DatosEmpresa
(EmpresaCodigo nchar(3), EmpresaNombre nvarchar(100),
EmpresaDireccion nvarchar(100))
go
Insertar registro
insert into ##DatosEmpresa values (‘298′,’Trainer SQL Team’,’Av. Trainer 4996′)
go
— Compruebe que todos los usuarios conectados tienen acceso a los registros de esta tabla.

Ejecute la siguiente instrucción en todas las conexiones.

select * from ##DatosEmpresa
go

Crear una tabla temporal usando la cláusula Into de la instrucción Select.

use Northwind
go

5. Crear una lista de productos

Select P.ProductID, P.ProductName, P.UnitPrice, P.UnitsInStock
into #ListaDePrecios
from Products As P   where P.Discontinued = 0  order by P.ProductName
go