zoukankan      html  css  js  c++  java
  • 获取动态SQL的返回结果

    1. 介绍说明

    有时候在执行存储过程后,需要获取存储过程返回的列表,然后进行相应操作的情况,或者执行动态语句,获取返回结果的情况,通过EXEC ,sp_executesql可以实现该功能。

    网上也有很多相关的读取方式,这里做个总结,方便以后查阅使用

    2. 建表测试脚本

    IF OBJECT_ID('tbScore') IS NOT NULL 
        DROP TABLE tbScore
    
    GO
    
    CREATE TABLE tbScore
        (
          姓名 VARCHAR(10) ,
          课程 VARCHAR(10) ,
          分数 INT,
          日期 DATETIME
        )
    GO
    
    INSERT  INTO tbScore VALUES  ( '张三', '语文', 74,GETDATE() )
    INSERT  INTO tbScore VALUES  ( '张三', '物理', 93 ,GETDATE() )
    INSERT  INTO tbScore VALUES  ( '李四', '语文', 74 ,GETDATE() )
    INSERT  INTO tbScore VALUES  ( '李四', '数学', 84 ,GETDATE() )
    INSERT  INTO tbScore VALUES  ( '李四', '物理', 94 ,GETDATE() )
    GO
    

    3. 例子演示

    2.1 通过EXEC 执行动态语句返回结果

    CREATE TABLE #tmpResult
        (
          姓名 VARCHAR(10) ,
          课程 VARCHAR(10) ,
          分数 INT,
          日期 DATETIME
        )
    GO
    
    
    DECLARE @SQL1 VARCHAR(1000)
    SET @SQL1 = 'SELECT [姓名],[课程],[分数],[日期] FROM tbScore'
    
    --将EXEC执行的结果写入临时表
    INSERT INTO #tmpResult EXEC(@SQL1)
    
    SELECT * FROM #tmpResult
    --清理临时表
    IF OBJECT_ID('tempdb..#tmpResult') IS NOT NULL
    BEGIN
    	DROP TABLE #tmpResult
    END

    2.2 通过sp_executesql 执行动态语句获取返回值 

    CREATE TABLE #tmpResult
        (
          姓名 VARCHAR(10) ,
          课程 VARCHAR(10) ,
          分数 INT,
          日期 DATETIME
        )
    GO
    
    DECLARE @SQL2 NVARCHAR(1000)
    DECLARE @Count INT
    SET @Count = 0
    
    --(1)获取单个返回值
    SET @SQL2 = 'SELECT @RowNum = COUNT(0) FROM tbScore'
    EXEC sp_executesql @SQL2,N'@RowNum INT OUTPUT',@Count OUTPUT 
    SELECT @Count    
    
    --(2)获取列表返回值
    DELETE FROM #tmpResult --先清空数据
    
    SET @SQL2 = 'SELECT [姓名],[课程],[分数],[日期] FROM tbScore'
    INSERT INTO #tmpResult EXEC sp_executesql @SQL2
    SELECT * FROM #tmpResult
    
    --清理临时表
    IF OBJECT_ID('tempdb..#tmpResult') IS NOT NULL
    BEGIN
    	DROP TABLE #tmpResult
    END
    

      

    4. 参考资料

     http://www.cnblogs.com/yinhaiming/articles/1544922.html

  • 相关阅读:
    mysql性能优化之索引优化
    提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
    MySQL高级-索引优化
    MySQL性能调优——索引详解与索引的优化
    通过force index了解的MySQL查询的性能优化
    Mysql 日期型,索引查询的问题
    mysql按日期分组(group by)查询统计的时候,没有数据补0的解决办法。
    SQL中Group By的使用
    GROUP BY 与聚合函数 使用注意点
    MYSQL GROUP BY Optimization
  • 原文地址:https://www.cnblogs.com/johden2/p/5730183.html
Copyright © 2011-2022 走看看