我正在努力实现:
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”。
我究竟做错了什么?
我正在努力实现:
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;
此外,传统上在 SQL 中使用单个等号进行比较。
要么在表中使用 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
临时表还有另一种方法
create table #TempTable (
ID int,
name varchar(max)
)
insert into #TempTable (ID,name)
Select ID,Name
from Table
SELECT *
FROM #TempTable
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
您应该使用哈希 (#) 表,这是您实际寻找的,因为变量值将一直保留到该执行。例如 -
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。
哈希表是存储和检索临时值的最佳选择。它持续很长时间,直到父会话还活着。
尝试以下查询:
SELECT ID,
Name
INTO #tempTable
FROM Table
SELECT *
FROM #tempTable
WHERE ID = 1
它不需要声明表。
@TEMP
如果您引用标识符,您仍然可以使用"@TEMP"
:
declare @TEMP table (ID int, Name varchar(max));
insert into @temp SELECT 1 AS ID, 'a' Name;
SELECT * FROM @TEMP WHERE "@TEMP".ID = 1 ;
您已经声明了@TEMP,但在您的插入语句中使用了@temp。区分大小写的变量名。
将@temp 更改为@TEMP