我正在尝试创建一个具有动态列数的临时表:
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)
我需要在其他处理中使用该表中的内容。
有什么合理的方法可以做到这一点吗?
一种解决方法是使用全局临时表:
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 之外使用它。