獲取動態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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM