SqlServer 傲娇的表变量

我们在编写自定义函数时,难免会用到表变量,但是,表变量关联时,会发生无法识别的错误。如:

--表1
DECLARE @tbl1 TABLE
(
id int,
ftext NVARCHAR(max),
fvalue NVARCHAR(max)
)
INSERT @tbl1 (id,ftext,fvalue) VALUES ('1','text1','value1')
INSERT @tbl1 (id,ftext,fvalue) VALUES ('2','text2','value2')
INSERT @tbl1 (id,ftext,fvalue) VALUES ('3','text3','value3')
--表2
DECLARE @tbl2 TABLE
(
id int,
ftext NVARCHAR(max),
fvalue NVARCHAR(max)
)
INSERT @tbl2 (id,ftext,fvalue) VALUES ('1','text1','value1')
INSERT @tbl2 (id,ftext,fvalue) VALUES ('2','text2','value2')
INSERT @tbl2 (id,ftext,fvalue) VALUES ('3','text3','value3')

SELECT * FROM @tbl1 INNER JOIN @tbl2 ON @tbl1.id = @tbl2.id

执行上面的sql 后,我们会得到如下的消息:

消息 137,级别 16,状态 1,第 22 行
必须声明标量变量 "@tbl1"。
消息 137,级别 16,状态 1,第 22 行
必须声明标量变量 "@tbl2"。

遇到这种情况时,如何处理?做如下修改,便可以飞起来:

SELECT * FROM @tbl1 INNER JOIN @tbl2 ON [@tbl1].id = [@tbl2].id

这里,涉及到[]的用法:

方括号的作用:

1.告诉编译器,使用的字段不是预留字段。

 → 

2.告诉编译器,这是一个对象(视图、存储过程,表等)。

原文地址:https://www.cnblogs.com/d1eec7bf/p/5584281.html