SQL 动态创建临时表
2017-12-14 10:15
483 查看
问题:exec 有独立作用域,动态拼接的SQL 采用exec 执行新建临时表时,exec外面调用不到新建的临时表
sql 动态临时表
方法一: 在代码中创建,再调用
方案二:用数据库函数,跳过临时表的限制
方法三:复合执行,采用两个存储过程
方案三亲测可用,如下:
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
相关文章推荐
- ASP和SQL语句动态创建Access表
- SQL创建临时表
- sql语句动态创建连接服务器
- sqlserver 动态创建临时表的语句分享
- MySQL通过视图(或临时表)实现动态SQL(游标)
- EXEC的两种用法以及用动态语句创建临时表的问题
- SQL临时表的创建+查询
- 创建临时表,一条sql语句一次插入多条记录
- 读取SqlDataReader数据动态创建DataTable
- Sql 怎么创建临时表
- 动态执行Sql语句与临时表的问题(对象名无效)
- SQL创建临时表
- EXEC的两种用法以及用动态语句创建临时表的问题
- sql判断临时表是否存在和创建临时表的方法
- sql 创建临时表 并且插入多条数据
- 不创建表结构,直接放入临时表结果(包括存储过程,直接sql语句)
- sql两种创建临时表 验证存在于删除
- JDBC 动态创建数据表 及 SQL预处理
- dbms_sql使用,用于创建通用动态sql
- MS SQL动态创建临时表