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中IS NULL、IS NOT NULL、!=不能用索引?胡扯!
    市值TOP10,人类进化及中美坐标
    倒序切片
    对list进行切片
    Python之定义可变参数
    Python之递归函数
    Python之“可变”的tuple
    Python之创建单元素tuple
    Python中Unicode字符串
    Pycharm配置autopep8让Python代码更符合pep8规范
  • 原文地址:https://www.cnblogs.com/johden2/p/5730183.html
Copyright © 2011-2022 走看看