300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > SQL 动态创建临时表

SQL 动态创建临时表

时间:2021-01-13 10:35:11

相关推荐

SQL 动态创建临时表

问题:exec 有独立作用域,动态拼接的SQL 采用exec 执行新建临时表时,exec外面调用不到新建的临时表

sql 动态临时表

方法一: 在代码中创建,再调用

方案二:用数据库函数,跳过临时表的限制

方法三:复合执行,采用两个存储过程

方案三亲测可用,如下:

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

执行效果如下:

ALTER PROCEDURE Proc_ceshi1(@AllAttributes VARCHAR(50),@aa varchar(10))ASBEGIN 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 @SQLEXECUTE sp_executeSQL @SQLEND

ALTER PROCEDURE Proc_ceshi2(@aa VARCHAR(10))AS BEGINSELECT * FROM #OneTempSELECT * FROM #TwoTempSELECT * FROM #ThreeTempSELECT @aaEND

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。