當前位置:首頁 » 編程語言 » sql輸出參數

sql輸出參數

發布時間: 2022-05-27 02:54:24

sql server 中 一個要輸入參數和輸出參數的存儲過程。

1、首先我們需要打開SQL Server Managment管理工具,新建一個表。

Ⅱ sql 存儲過程裡面輸出參數是什麼意思就是後面加個output 那種參數,和其他參數有什麼不一樣

其他參數要提前賦值,而output不需要提前賦值,只需要提供一個變數,在存儲過程執行完的時候,output類型的變數值就會修改,獲得返回值,只能通過這個方法獲得返回值,而不能像函數一樣直接返回結果。因為存儲過程是沒有返回值的。

Ⅲ SQL查詢語句selete語句中,輸出參數調用怎麼用

DECLARE @NUM INT
EXEC QUERY_CLASS '001',@NUM OUTPUT
SELECT @NUM
創建完存儲過程後面加個GO執行批處理
create procere query_class(@class_no nchar(6),@num int output )
as select @num=count(s_no)
from Student
where class_no=@class_no
GO

Ⅳ 存儲過程中如何執行帶輸出參數的動態SQL

SQL Server存儲過程中執行帶輸出參數的動態sql是很多人經常碰到的問題,比如根據一些條件查詢列表,並返回記錄數等。下面是一個參考示例,查詢用戶列表,它可以利用臨時表實現翻頁,並帶有死鎖和超時檢測功能。 CREATE PRocere pUserList ( @UserType char(2), @pagenum int, @perpagesize int, @pagetotal int out, @rowcount int out ) as set nocount on DECLARE @Err INT,@ErrCounter INT declare @sql nvarchar(2000) --聲明動態sql執行語句 declare @pagecount int --當前頁數 declare @sWhere nvarchar(200) declare @sOrder nvarchar(100) set @sWhere = ' where 1=1 ' if not(@UserType is null) set @sWhere = @sWhere + ' and UserType = ' + @UserType set @sOrder = ' order by UserID ' --取得當前資料庫的記錄總數 declare @row_num int LockTimeOutRetry: --創建臨時表,作為數據過濾 create table #change (T_id int) set @sql = 'select @row_num=count(*) from dbo.[User]' + @sWhere exec sp_executesql @sql,N'@row_num int output', @row_num output if @row_num % @perpagesize =0 set @pagetotal = @row_num/@perpagesize else set @pagetotal = @row_num/@perpagesize + 1 set @rowcount = @row_num if @row_num > @perpagesize begin set @row_num = @pagenum * @perpagesize if @row_num = @perpagesize begin set @sql = N'select top ' + cast(@perpagesize as varchar) + ' UserID,LoginName,RealName from dbo.[User]' + @sWhere + @sOrder exec sp_executesql @sql SET @Err = @@ERROR IF @Err <> 0 GOTO ErrorHandler return 0 end else begin set @row_num = (@pagenum-1) * @perpagesize set @pagecount = @row_num set @sql=N'insert #change (T_id) select top ' + cast(@pagecount as varchar) + ' UserID from dbo. [User] '+@sWhere+' and UserID not in (select T_id from #change)' + @sOrder exec sp_executesql @sql set @sql = N'select top ' + cast(@perpagesize as varchar) + ' UserID,LoginName,RealName from dbo.[User] '+@sWhere+' and UserID not in (select T_id from #change)' + @sOrder exec sp_executesql @sql SET @Err = @@ERROR IF @Err <> 0 GOTO ErrorHandler return 0 end end else begin set @sql = 'select UserID,LoginName,RealName from dbo.[User]' + @sWhere + @sOrder exec sp_executesql @sql SET @Err = @@ERROR IF @Err <> 0 GOTO ErrorHandler return 0 end ErrorHandler: IF (@Err = 1222 OR @Err = 1205) AND @ErrCounter = 5 BEGIN RAISERROR ('Unable to Lock Data after five attempts.', 16,1) return -100 END IF @Err = 1222 OR @Err = 1205 -- Lock Timeout / Deadlock BEGIN WAITFOR DELAY '00:00:00.25' SET @ErrCounter = @ErrCounter + 1 GOTO LockTimeOutRetry END -- else unknown error RAISERROR (@err, 16,1) WITH LOG return -100 GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO

Ⅳ SQL資料庫輸出參數問題

CREATE PROC proc_UserInfo_LdTimes
@Phone nvarchar(50),@DlTimes nvarchar(50) output
AS
BEGIN
SELECT @DlTimes=DlTimes FROM UserInfo WHERE Phone=@Phone
END

Ⅵ SQL為什麼要用輸出參數,還有他的作用是什麼

儲存過程本身有一個返回值, 但是這個返回值並不是讓你返回運算結果的, 而是用來返回一個執行狀態(也就是錯誤代碼), 通常返回0表示正常, 而真正處理出來的數據要麼select出來, 要麼用output參數
另外, 如果一個存儲過程要返回多個值, 你用他那個返回值也不夠啊
還有一點, 如果你用EF的話, 他是沒有辦法接收到他的返回結果的

Ⅶ sql存儲過程 輸出參數

SQL存儲過程輸出參數:

--===================【創建存儲過程】=====================

USE[Message]
GO
/******Object:StoredProcere[dbo].[讀取外部資料庫查詢]ScriptDate:10/24/201205:39:16******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
--=============================================\Working沒有變1,錯誤碼沒有測試,計劃時間測試,企業名稱

createPROCEDURE[dbo].[資料庫查詢]
@SmsContentvarchar(20)='1231',--輸入參數
@bj1intout--輸入出參數

AS
BEGIN

SELECT@bj1=count(Id)fromsss

END


--===============【調用】==================

USE[Message]

DECLARE@return_valueint

EXEC[dbo].[資料庫查詢]'1231',@return_valueoutput

SELECT@return_value

Ⅷ 動態sql語句如何輸出多個參數

DECLARE @FORM_KIND VARCHAR(50)
DECLARE @FORM_NO VARCHAR(50)
DECLARE @Sql NVARCHAR(1000)
declare @X nvarchar(500)
declare @Y nvarchar(500)
set @form_kind='SYS.FORM.008';
set @form_no=12500;

SET @Sql ='select 1 as num, tah.travel_purpose || ''$$'' || tah.bu_code || ''$$'' || tah.ou_code document_summary from bpm.bpm_tes_flow f,bpm.bpm_tes_ta_head tah where tah.ta_head_id=f.source_id and f.source_category=''TA''
and f.form_kind='''+@form_kind+''' and f.form_no=12500';
print @Sql
SET @Sql = 'SELECT @A=document_summary,@B=num FROM OPENQUERY(ORACLE_ERP, ''' + REPLACE(@Sql, '''', '''''') + ''')'
exec sp_executesql @Sql,N'@A NVARCHAR(500) output,@B NVARCHAR(50) OUTPUT',@X output,@Y OUTPUT
PRINT @X+'============'+@Y

Ⅸ PHP得到mssql的存儲過程的輸出參數功能實現

在開發過程中可能會遇到無法取得MSSQL存儲過程的輸出參數,很多朋友都不知道該怎麼辦,本文將詳細介紹PHP得到mssql的存儲過程的輸出參數功能實現,需要了解的朋友可以參考下
復制代碼
代碼如下:
<?
$conn=mssql_connect("127.0.0.1","user","passwd");
mssql_select_db("mydb");
$stmt=mssql_init("pr_name",$conn);//
$a=50001;
mssql_bind($stmt,"RETVAL",$val,SQLVARCHAR);
//用於直接返回return
-103此類的值。
mssql_bind($stmt,"@outvar",$b,SQLVARCHAR,true);//用於返回在存儲過程中定義的輸出參數
mssql_bind($stmt,"@invar",$a,SQLINT4);
$result
=
mssql_execute($stmt,true);//不能返回結果集,只能得到輸出參數
//$result
=
mssql_execute($stmt,false);
//返回結果集
//$records=mssql_fetch_array($result);
//print_r($records);
//mssql_next_result($result);下一個結果集,當等於FALSE的時候下一個就是輸出參數
echo
$b;
echo
$val;
?>
下面這些是從別的地方看到的。
小麻煩:
我們按照慣例使用了一個MS
Sql
Server的存儲過程procA,它給出了一個輸出參數nReturn,
而且返回了一個結果集。
在如何讓PHP調用這個procA的時候,我們遭遇了一點小麻煩。
魚肉和熊掌不可兼得:
我們本來希望這樣的代碼能夠既得到輸出參數,又得到返回的結果集:
復制代碼
代碼如下:
//
初始化要傳進存儲過程的參數們:
$nYear
=
2004;
$nPageSize
=
20;
$nPageNo
=
1;
//
Initializes
a
stored
procere:
$stmt
=
mssql_init("proc_stat_page",
$db_mssql->Link_ID);
//
綁定輸入參數:
mssql_bind($stmt,
"@nReturn",
$nReturn,
SQLINT4,
TRUE);
mssql_bind($stmt,
"@nYear",
$nYear,
SQLINT4);
mssql_bind($stmt,
"@nPageSize",
$nPageSize,
SQLINT4);
mssql_bind($stmt,
"@nPageNo",
$nPageNo,
SQLINT4);
//
執行存儲過程,得到QueryID:
$db_mssql->Query_ID
=
mssql_execute($stmt,false);
雖然得到了結果集,但是,這樣$nReturn參數是拿不到輸出參數的。
如果把最後一句話改為:
$db_mssql->Query_ID
=
mssql_execute($stmt,true);
輸出參數倒是拿到了,結果集又沒有了。
好像是一個魚肉和熊掌不可兼得的樣子。
難道PHP連這個都做不到?PHP手冊中也沒有講這個問題。
來自於PHP維護者的解釋:
原本我們這種調用辦法是PHP
4.3版本之前肯定是支持的。
「但是,自從PHP
4.3版本之後,」他們說,「為了能夠兼容存儲過程返回多個結果集,PHP改變這個特性。」
「如果你不需要結果集,你應該設置mssql_execute的第二個可選參數為TRUE,這樣mssql_execute方法之後你就可以得到輸出參數了。」
「如果你需要返回的結果集們,你應該為每一個結果集調用一次mssql_next_result。在最後一個結果集返回之後,你再調用mssql_next_result就會得到返回值FALSE,這時候,你就可以訪問輸出參數了。」
解決:
在最後我們補上一句話:
//
After
the
last
result
has
been
returned
the
return
value
will
have
the
value
returned
by
the
stored
procere.
mssql_next_result($db_mssql->Query_ID);
立刻,魔法生效了:
PHP填充了正確的輸出參數到$nRetVal里。

Ⅹ Sql Server中存儲過程中輸入和輸出參數(簡單實例 一看就懂)

[sql]
--
===================【創建存儲過程】=====================
USE
[Message]
GO
/******
Object:
StoredProcere
[dbo].[讀取外部資料庫查詢]
Script
Date:
10/24/2012
05:39:16
******/
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
--
=============================================
\\
Working沒有變1,錯誤碼沒有測試,計劃時間測試,企業名稱
create
PROCEDURE
[dbo].[資料庫查詢]
@SmsContent
varchar(20)='1231',
--
輸入參數
@bj1
int
out
--
輸入出參數
AS
BEGIN
SELECT
@bj1=count(Id)
from
sss
END
--
===============【調用】==================
USE
[Message]
DECLARE
@return_value
int
EXEC
[dbo].[資料庫查詢]
'1231',@return_value
output
SELECT
@return_value

熱點內容
銳志哪個配置性價比最高 發布:2025-02-12 17:38:43 瀏覽:917
智能推送演算法 發布:2025-02-12 17:38:41 瀏覽:834
拍照上傳器 發布:2025-02-12 17:34:29 瀏覽:651
androidweb框架 發布:2025-02-12 17:32:45 瀏覽:75
安卓編程賀卡 發布:2025-02-12 17:32:44 瀏覽:837
php獲取資料庫的欄位 發布:2025-02-12 17:29:02 瀏覽:765
伺服器地址消失 發布:2025-02-12 17:23:36 瀏覽:950
後台執行php腳本 發布:2025-02-12 17:21:45 瀏覽:470
spring編程式事務 發布:2025-02-12 17:16:55 瀏覽:397
nginx禁止ip訪問 發布:2025-02-12 17:15:14 瀏覽:273