T-SQL:如何加入@variable表

时间:2011-06-09 13:04:39

标签: sql tsql sql-server-2008

  

可能重复:
  T-SQL: How to join @variable tables (another try)

首先:我正在使用SQL Server 2008。 在涉及大量数据的复杂算法中,我一直在使用创建中间表变量的技术:

DECLARE @table AS TABLE (Col1 INT, Col2 VARCHAR(100))

不幸的是,SQL Server不支持JOINning @variable表,只允许加入数据库中的“true”表。

我可以进行“手动”加入,例如

FROM @table1 t1, @table2 t2
WHERE t1.Id = t2.Id

这会导致INNER JOIN,但这对我来说是错误的。问题是:如何完全加入两个@variable表?

3 个答案:

答案 0 :(得分:10)

SQL是什么意思不支持连接表变量?

它对我有用

DECLARE @table1 AS TABLE (Col1 INT, Col2 VARCHAR(100))
DECLARE @table2 AS TABLE (Col1 INT, Col2 VARCHAR(100))

SELECT *
FROM @table1 t1
FULL JOIN @table2 t2 on t1.Col1 = t2.Col1

答案 1 :(得分:2)

您应该可以使用@tableVariable

进行联接
SELECT * 
FROM table1 t
FULL JOIN @tableVariable tv
ON (tv.col = cnc.col)

它与您的兼容性设置有什么关系吗? (我的是100)

sp_dbcmptlevel 'database_name'

ALTER DATABASE database_name 
    SET COMPATIBILITY_LEVEL = { 80 | 90 | 100 }

答案 2 :(得分:2)

我不确定你在问什么,因为加入对于表变量来说效果很好。见这个例子:

declare @table as table (Col1 int, Col2 varchar(100))
declare @table2 as table (Col1 int, Col2 varchar(100))

insert into @table
select 1, 'A'
union all
select 1, 'C'
union all
select 1, 'D'

insert into @table2
select 2, 'A'
union all
select 2, 'B'
union all
select 2, 'D'
union all
select 2, 'E'

select
    *
from
    @table t1 full outer join
    @table2 t2 on t1.Col2 = t2.Col2

select
    *
from
    @table t1 left join
    @table2 t2 on t1.Col2 = t2.Col2

select
    *
from
    @table t1 right join
    @table2 t2 on t1.Col2 = t2.Col2

select
    *
from
    @table t1 join
    @table2 t2 on t1.Col2 = t2.Col2