如何在动态查询中两次使用临时表?

问题描述

我想在动态查询中使用表变量。

所以我喜欢以下内容

B

而且效果很好。

但是,我需要两次使用临时表,如下所示:

AAdapter

但是,它不起作用。

如果我删除一个条件,它就可以正常工作。

所以我想临时表只能使用一次。

我该如何解决


编辑:这很好:

SET @sql_query = N'

SELECT *
from #temptable
'

EXEC sp_executesql @sql_query;

这也可以正常工作:

SET @sql_query = N'

SELECT *
from #temptable tm1
where tm1.column1 in (select column2 from #tttable)
 OR tm1.column3 in (select column4 from #tttable)
'

EXEC sp_executesql @sql_query;

我想说条件没有问题。

现在,如果我所讨论的代码错误消息是:

'#tt'附近的语法不正确。

解决方法

我解决了这个问题... 问题是“ @sql_query”的大小。 临时表可以使用两次,如下所示:

谢谢。

create table #temp1
(
  column1 varchar(10)
)

create table #temp2
(
  column2 varchar(10),column3 varchar(10),column4 varchar(10)
)

create table #temp3
(
  column5 varchar(10)
)

insert into #temp1 values('aaa')

insert into #temp2 values('aaa','bbb1','ccc')
insert into #temp2 values('aaa','bbb2','ccc')
insert into #temp2 values('aaa2','bbb3','ccc2')
insert into #temp2 values('aaa2','bbb4','ccc2')

insert into #temp3 values('aaa')
insert into #temp3 values('aaa2')

    declare @sql_query NVARCHAR(1000) = N'
    select *,RANK() OVER(PARTITION BY temp2.column2 order by temp2.column3 desc ) as MAXRank
    from #temp2 temp2
    join #temp3 temp3
    on temp2.column2 = temp3.column5
    and 
    (
        (column2 in (select column1 from #temp1) and column4 = temp3.column5)       
        OR (column2 not in (select column1 from #temp1) and column4 != temp3.column5)
        OR column3 = ''bbb1''
    )
    '


    EXEC sp_executesql @sql_query;

DROP TABLE #temp1
DROP TABLE #temp2
DROP TABLE #temp3