创建具有动态列数的临时表

Bud*_*rin 5 t-sql sql-server

我正在尝试创建一个具有动态列数的临时表:

set @cmd = ' SELECT * into #temp3 from
            (
                select * from sometable
            ) x pivot
            (
                max(buildrate)
                for name in ('+ @columns +')
            ) as y '

execute(@cmd);

select * from #temp3 left join performed in an elegant way... 
Run Code Online (Sandbox Code Playgroud)

我需要在其他处理中使用该表中的内容。

有什么合理的方法可以做到这一点吗?

Luk*_*zda 4

一种解决方法是使用全局临时表:

SET @cmd = ' SELECT * INTO ##temp3 FROM
            (
                select * from sometable
            ) x pivot
            (
                max(buildrate)
                for name in ('+ @columns +')
            ) as y '

EXECUTE(@cmd);

SELECT *
INTO #temp3
FROM ##temp3;

DROP TABLE ##temp3;

SELECT *
FROM JOIN #temp3 
LEFT ...;
Run Code Online (Sandbox Code Playgroud)

普通的本地临时表将不起作用,因为动态 SQL 创建了新的上下文。该表位于该上下文中,并且在执行代码时将不再存在,因此您无法在 Dynamic-SQL 之外使用它。

  • 如果这个过程将被多个用户同时调用怎么办?是否存在这样的情况:当 ##temp3 被删除时,我们将插入到 #temp3 中? (2认同)