Подтвердить что ты не робот

Переменная таблицы SQL temp

Я пытаюсь достичь:

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

НО возникшая ошибка

Должен объявить скалярную переменную "@temp".

любая помощь?

4b9b3361

Ответ 1

Алиас таблицы не может начинаться с @. Итак, дайте @Temp еще один псевдоним (или вообще не укажем название двух частей):

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

Кроме того, для сравнения используется традиционный знак равенства.

Ответ 2

Либо используйте Allias в таблице, как T, и используйте T.ID, либо используйте только имя столбца.

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

SELECT * FROM @TEMP 
WHERE ID  = 1 

Ответ 3

Если вы скопируете @, вы можете использовать его напрямую

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

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

Ответ 4

Существует еще один метод таблицы 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 

Убедитесь, что вы выбрали правильную базу данных.

Ответ 5

Вы должны использовать таблицы hash (#), которые вы действительно ищете, поскольку значение переменных останется до этого выполнения. например -

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

Если выше двух и ниже двух операторов выполняются отдельно.

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

Ошибка покажет, потому что значение переменной теряется, когда вы выполняете партию запроса во второй раз. Он определенно дает o/p, когда вы запускаете весь блок кода.

Хэш-таблица является наилучшим вариантом для хранения и получения временного значения. Это длится до тех пор, пока родительская сессия не будет жива.

Ответ 6

В отличие от обычных параметров, начинающихся с "@" (например, @parameter), временные таблицы должны начинаться С# (например, #tempTable). Как предлагает GauravSetia, вы должны объявить свою временную таблицу так же, как и обычную таблицу, но назовите ее С# вместо @, и она будет доступна только в вашем текущем сеансе и будет закрыта при закрытии сеанса. У вас также может быть глобальная временная таблица, которая начинается С## (например, ## globalTempTable), которая может использоваться во время сеансов и падает при закрытии сеанса, в котором она была создана, но я еще не использовал один из них.

Ответ 7

Вы объявили @TEMP, но в вашем заявлении insert используется @temp. Имена переменных, чувствительных к регистру.

Измените @temp на @TEMP