Variable de tabla temporal SQL


Estoy tratando de lograr :

declare @TEMP table (ID int, Name varchar(max))
insert into @temp SELECT ID, Name FROM Table

SELECT * FROM @TEMP 
WHERE @TEMP.ID  = 1        <--- ERROR AT @TEMP.ID

PERO un error que surge

Debe declarar la variable escalar "@temp".

Alguna ayuda ?

Author: objectWithoutClass, 2013-08-01

7 answers

Un alias de tabla no puede comenzar con un @. Por lo tanto, dar @Temp otro alias (o dejar fuera el nombre de dos partes por completo):

SELECT *
FROM @TEMP t
WHERE t.ID = 1;

También, un solo signo igual se utiliza tradicionalmente en SQL para una comparación.

 30
Author: Gordon Linoff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-01 13:24:29

O bien utilizar un Allias en la tabla como T y utilizar T.ID, o use solo el nombre de la columna.

declare @TEMP table (ID int, Name varchar(max))
insert into @temp SELECT ID, Name FROM Table

SELECT * FROM @TEMP 
WHERE ID  = 1 
 11
Author: Giannis Paraskevopoulos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-01 13:24:08

Si se pone entre corchetes @ se puede utilizar directamente

declare @TEMP table (ID int, Name varchar(max))
insert into @temp values (1,'one'), (2,'two')

SELECT * FROM @TEMP 
WHERE [@TEMP].[ID] = 1
 7
Author: paparazzo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-01 14:12:10

Hay otro método de tabla de temp

create table #TempTable (
ID int,
name varchar(max)
)

insert into #TempTable (ID,name)
Select ID,Name 
from Table

SELECT * 
FROM #TempTable
WHERE ID  = 1 

Asegúrese de que está seleccionando la base de datos correcta.

 5
Author: GauravSetia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-12 06:41:25

Debe usar tablas hash ( # ), que realmente busca porque el valor de las variables permanecerá hasta esa ejecución solamente. por ejemplo -

declare @TEMP table (ID int, Name varchar(max))
insert into @temp SELECT ID, Name FROM Table

Cuando las sentencias above two y below two se ejecutan por separado.

SELECT * FROM @TEMP 
WHERE @TEMP.ID  = 1 

El error se mostrará porque el valor de la variable se pierde cuando ejecuta el lote de consulta por segunda vez. Definitivamente da o / p cuando se ejecuta un bloque entero de código.

La tabla hash es la mejor opción posible para almacenar y recuperar el temporal valor. Dura mucho tiempo hasta que la sesión de padres esté viva.

 0
Author: sumit salunkhe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-21 05:54:20

A diferencia de los parámetros habituales que comienzan con un '@' (por ejemplo, @parameter), las tablas temporales deben comenzar con un # (por ejemplo, #tempTable). Como sugiere GauravSetia, debe declarar su tabla temporal como lo haría con una tabla normal, pero nombrarla con un # en lugar de @ y solo estará disponible en su sesión actual, y se soltará cuando cierre la sesión. También puede tener una tabla temporal global que comienza con un # #(por ejemplo, # # globalTempTable) que se puede usar en sesiones y caídas cuando cierre la sesión en la que se creó, pero aún no he usado uno de estos.

 -1
Author: Catatron 5,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-11 13:45:21

Has declarado @TEMP pero en tu instrucción insert usaste @temp. Nombres de variables sensibles a mayúsculas y minúsculas.

Cambiar @temp a @TEMP

 -4
Author: user5024681,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-18 15:04:57