您的位置:首页 > 数据库

SQL 动态创建临时表

2017-12-14 10:15 483 查看
问题:exec 有独立作用域,动态拼接的SQL 采用exec 执行新建临时表时,exec外面调用不到新建的临时表

sql 动态临时表
方法一: 在代码中创建,再调用
方案二:用数据库函数,跳过临时表的限制
方法三:复合执行,采用两个存储过程

方案三亲测可用,如下:

--业务:根据AllAttributes 来创建临时表的字段(逗号分隔)
Proc_ceshi1  动态拼接,Proc_ceshi2 调用拼接后的临时表
EXEC Proc_ceshi1 @AllAttributes = N'Attrib4,Attrib3,Attrib2',@aa='2017-01-01'
执行效果如下:




ALTER PROCEDURE Proc_ceshi1(
@AllAttributes VARCHAR(50),
@aa varchar(10)
)
AS
BEGIN

DECLARE @CreateSQL1 varchar(500),@CreateSQL2 VARCHAR(500),@CreateSQL3 VARCHAR(500)
--SET @AllAttributes = N'Attrib4,Attrib3,Attrib2,Attrib1'

SET @CreateSQL1=REPLACE ( @AllAttributes , ',' , ' varchar(20)  null,' )+' varchar(20)  null,'

--第一年
SET @CreateSQL1='CREATE TABLE #OneTemp('+@CreateSQL1+'
One_Num DECIMAL(18,1) not null default 0,
One_Amount DECIMAL(18,1) not null default 0,
One_FAmount DECIMAL(18,1) not null default 0,
One_Maori DECIMAL(18,1) not null default 0,
); '

--第二年
SET @CreateSQL2=REPLACE ( @CreateSQL1 , 'One' , 'Two' )
--第三年
SET @CreateSQL3=(REPLACE ( @CreateSQL1 , 'One' , 'Three' ))

DECLARE @SQL NVARCHAR(3000)
SET @SQL =@CreateSQL1+@CreateSQL2+ @CreateSQL3 + '; EXEC Proc_ceshi2 '''+@aa+''''
PRINT @SQL
EXECUTE sp_executeSQL @SQL
END


ALTER PROCEDURE Proc_ceshi2(
@aa VARCHAR(10)
)
AS
BEGIN
SELECT * FROM #OneTemp
SELECT * FROM #TwoTemp
SELECT * FROM #ThreeTemp
SELECT @aa
END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: