zoukankan      html  css  js  c++  java
  • SQL 动态创建临时表

    问题: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
  • 相关阅读:
    Javascript中怎么定义类(私有成员、静态成员)?
    Web前端国内的叫法与行业归类吗
    CSS hack,CSS简写,CSS定义应注意的几个问题
    7个在IE和Firefox中不同的JavaScript语法
    IE和Firefox中的事件
    IE8的css hack /9
    CSS hack
    运行,复制,保存,runCode,copyCode,saveCode,运行代码框
    自由使用层的叠加
    WordPress自定义URL的Rewrite规则
  • 原文地址:https://www.cnblogs.com/zoumin123/p/8036318.html
Copyright © 2011-2022 走看看