Ответ 1
Алиас таблицы не может начинаться с @
. Итак, дайте @Temp
еще один псевдоним (или вообще не укажем название двух частей):
SELECT *
FROM @TEMP t
WHERE t.ID = 1;
Кроме того, для сравнения используется традиционный знак равенства.
Я пытаюсь достичь:
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".
любая помощь?
Алиас таблицы не может начинаться с @
. Итак, дайте @Temp
еще один псевдоним (или вообще не укажем название двух частей):
SELECT *
FROM @TEMP t
WHERE t.ID = 1;
Кроме того, для сравнения используется традиционный знак равенства.
Либо используйте 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
Если вы скопируете @, вы можете использовать его напрямую
declare @TEMP table (ID int, Name varchar(max))
insert into @temp values (1,'one'), (2,'two')
SELECT * FROM @TEMP
WHERE [@TEMP].[ID] = 1
Существует еще один метод таблицы 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
Убедитесь, что вы выбрали правильную базу данных.
Вы должны использовать таблицы 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, когда вы запускаете весь блок кода.
Хэш-таблица является наилучшим вариантом для хранения и получения временного значения. Это длится до тех пор, пока родительская сессия не будет жива.
В отличие от обычных параметров, начинающихся с "@" (например, @parameter), временные таблицы должны начинаться С# (например, #tempTable). Как предлагает GauravSetia, вы должны объявить свою временную таблицу так же, как и обычную таблицу, но назовите ее С# вместо @, и она будет доступна только в вашем текущем сеансе и будет закрыта при закрытии сеанса. У вас также может быть глобальная временная таблица, которая начинается С## (например, ## globalTempTable), которая может использоваться во время сеансов и падает при закрытии сеанса, в котором она была создана, но я еще не использовал один из них.
Вы объявили @TEMP, но в вашем заявлении insert используется @temp. Имена переменных, чувствительных к регистру.
Измените @temp на @TEMP