LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

存儲過程用sp_executesql執行動態SQL語句及獲得返回值

Ccoffee
2024年6月27日 9:38 本文熱度 834
:存儲過程用sp_executesql執行動態SQL語句及獲得返回值


用sp_executesql執行動態SQL語句及獲得返回值

過去我執行拼湊出來的動態SQL語句,都直接使用EXEC @sql 的方式。有好幾次,都看到有資料說,應該盡量使用 sp_executesql。

究其原因,是因為僅僅參數不同的情況下,sp_executesql可以重用執行計劃,這不就有跟存儲過程一樣的優勢了嗎?同時,sp_executesql還可以提供動態SQL語句執行的返回值,方便得很。

但sp_executesql的使用方式看上去比較復雜,一點都不像EXEC那樣直觀。

用法:

EXEC sp_executesql SQL語句,參數聲明,參數



	CREATE TABLE #tmp(t INT NOT NULL,it DECIMAL(18,4),pt DECIMAL(18,4));
	INSERT INTO #tmp(t,it,pt) VALUES(1,10.00,15.00);
	INSERT INTO #tmp(t,it,pt) VALUES(2,20.00,30.00);
	DECLARE @sql NVARCHAR(2000) = N'SELECT @it=it,@pt=pt FROM #tmp WHERE t=@tN;';
	DECLARE @Param NVARCHAR(500) = N'@tN INT,@it DECIMAL(18,4) OUTPUT,@pt DECIMAL(18,4) OUTPUT';
	DECLARE @tN INT,@it DECIMAL(18,4),@pt DECIMAL(18,4);
	
	SET @tN = 1;
	--@tN=@tN,第一個@tN是@Param里的聲明,而第二個@tN則是外部的聲明,其他類似
	EXEC sp_executesql @sql,@Param,@tN=@tN,@it=@it OUTPUT,@pt=@pt OUTPUT;
	SELECT @it,@pt;
	
	DROP TABLE #tmp;

為什么有返回值那么重要呢?我在不知道這個用法以前,如果需要捕捉動態SQL語句里的返回值,要借用表對象:


詳見拙作:

http://blog.csdn.net/leftfist/article/details/12840785



declare @sql NVARCHAR(MAX) = N'SELECT @i,@j;';
declare @paramdefine NVARCHAR(MAX) = N'@i INT,@j INT,@k INT=3';
exec sp_executesql @sql,@paramdefine,@i=1,@j=2;

該文章在 2024/6/27 9:38:03 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
中文字幕乱码中文乱码51精品 | 伊人久久大香线蕉亚洲五月天色悠 | 在线国内精品自线视频 | 日本人妖在线观看 | 日本一本精品中文字幕视频 | 亚洲AV高清手机在线 |