調用存儲過程返回值
當@UserID存在返回JID,否則返回-1,--存儲過程Create Procere _GetUserJID(@UserID Varchar(128),@Rst Int Out)
As
Begin
Select @Rst=JID From TB_USer Where StrUserID=@UserID
If(Isnull(@Rst,0)=0)
Set @UserID=-1
Set @Rst=@UserID
End
--調用
Declare @Rst Int
Exec _GetUserJID '1001',@Rst Out
Select @Rst--函數Create Function F_GetUserJID(@UserID Varchar(128))
Returns Int
As
Begin
Declare @Rst Int
Select @Rst=JID From TB_USer Where StrUserID=@UserID
If @Rst Is Null
Set @Rst=-1
Return @Rst
End --調用Select dbo.F_GetUserJID('1001')
2. asp.net調用存儲過程返回值問題
你的用法不對,存儲過程的返回值不是用來返回數據的,存儲過程只能返回int,而且這個int的目的是用來表示存儲過程執行狀態的,比如執行成功,執行錯誤等等。你這種情況要用output parameter,比較符合標准。
但其實這不是重點,重點是ExecuteScalar是返回結果集第一行第一列的值,不是return value,你搞錯了。
3. 如何在PB中調用存儲過程並取得返回值和輸出值的相關推薦
沒有見過調用存儲過程象調用游標一樣的代碼,一般我是這樣聲明的:DECLARE Lproc_1 PROCEDURE FOR
proc_1 @as_int = :li_int OUTPUT ;
execute Lproc_cw_gz_personal_cal ;
變數li_int即為返回的值。如果要同時返回多行的數據,可以使用DATAWINDOW或者是DATASTORE來得到結果集:
string ls_sql_syntax , ls_syntax
string ls_error
integer li_ini
ls_sql_syntax = 'execute proc_1 "' + string ( li_ini ) + '"'
Datastore ldt_item
ldt_item = Create Datastore
ls_syntax = SQLCA.SyntaxFromSQL( ls_sql_syntax '', ls_error )
IF Len( ls_error ) > 0 THEN
MessageBox("提示信息", "創建數據存儲窗口語法出現錯誤!" + ls_error )
RETURN - 1
END IF
ldt_item .Create( ls_syntax, ls_error )
IF Len( ls_error ) > 0 THEN
MessageBox("提示信息", "創建數據存儲對象出現錯誤!" + ls_error )
RETURN - 1
END IF
ldt_item . Settransobject ( sqlca )
ldt_item . retrieve ( )
後面就通常的遍歷了!
4. 存儲過程中調用帶返回值的函數
如果是ACCESS、MySQL、SQL 2000 資料庫
SELECT * FROM tabel_ WHERE date < (now()-30)
資料庫都自帶很多函數的
5. 在 sql select 語句中 如何獲取 存儲過程的返回值
SQL Server中存儲過程的返回值不是通過return語句返回的(return語句是在用戶自定義函數中使用的),而是通過存儲過程的參數來返回,在定義存儲過程的參數時使用關鍵字output來指定此參數是返回值。
而在調用存儲過程時,也必須使用關鍵字給接收返回值的變數,這樣才能在調用時獲得存儲過程的返回值。
示例:
createproceredbo.pr_add@aint,@bint,@cintoutput
as
set@c=@a+@b
go
調用:
declare@vint
executedbo.pr_add1,2,@voutput
select@v
6. SQL Server 在一個存儲過程中調用另外一個存儲過程獲取返回值,出現報錯
第一種方法: 使用output參數
USE AdventureWorks;
GO
IF OBJECT_ID ( 'Proction.usp_GetList', 'P' ) IS NOT NULL
DROP PROCEDURE Proction.usp_GetList;
GO
CREATE PROCEDURE Proction.usp_GetList @proct varchar(40)
, @maxprice money
, @compareprice money OUTPUT
, @listprice money OUT
AS
SELECT p.name AS Proct, p.ListPrice AS 'List Price'
FROM Proction.Proct p
JOIN Proction.ProctSubcategory s
ON p.ProctSubcategoryID = s.ProctSubcategoryID
WHERE s.name LIKE @proct AND p.ListPrice < @maxprice;
-- Populate the output variable @listprice.
SET @listprice = (SELECT MAX(p.ListPrice)
FROM Proction.Proct p
JOIN Proction.ProctSubcategory s
ON p.ProctSubcategoryID = s.ProctSubcategoryID
WHERE s.name LIKE @proct AND p.ListPrice < @maxprice);
-- Populate the output variable @compareprice.
SET @compareprice = @maxprice;
GO
另一個存儲過程調用的時候:
Create Proc Test
as
DECLARE @compareprice money, @cost money
EXECUTE Proction.usp_GetList '%Bikes%', 700,
@compareprice OUT,
@cost OUTPUT
IF @cost <= @compareprice
BEGIN
PRINT 'These procts can be purchased for less than
$'+RTRIM(CAST(@compareprice AS varchar(20)))+'.'
END
ELSE
PRINT 'The prices for all procts in this category exceed
$'+ RTRIM(CAST(@compareprice AS varchar(20)))+'.'
第二種方法:創建一個臨時表
create proc GetUserName
as
begin
select 'UserName'
end
Create table #tempTable (userName nvarchar(50))
insert into #tempTable(userName)
exec GetUserName
select #tempTable
--用完之後要把臨時表清空
drop table #tempTable--需要注意的是,這種方法不能嵌套。例如:
procere a
begin
...
insert #table exec b
end
procere b
begin
...
insert #table exec c
select * from #table
end
procere c
begin
...
select * from sometable
end
--這里a調b的結果集,而b中也有這樣的應用b調了c的結果集,這是不允許的,
--會報「INSERT EXEC 語句不能嵌套」錯誤。在實際應用中要避免這類應用的發生。
第三種方法:聲明一個變數,用exec(@sql)執行:
1);EXEC 執行SQL語句
declare @rsql varchar(250)
declare @csql varchar(300)
declare @rc nvarchar(500)
declare @cstucount int
declare @ccount int
set @rsql='(select Classroom_id from EA_RoomTime where zc='+@zc+' and xq='+@xq+' and T'+@time+'=''否'') and ClassroomType=''1'''
--exec(@rsql)
set @csql='select @a=sum(teststucount),@b=sum(classcount) from EA_ClassRoom where classroom_id in '
set @rc=@csql+@rsql
exec sp_executesql @rc,N'@a int output,@b int output',@cstucount output,@ccount output--將exec的結果放入變數中的做法
--select @csql+@rsql
--select @cstucount
7. C# 調用 存儲過程中,參數 input output return 的含義.
input 是輸入參數
output 是輸出參數
return 是返回值,是存儲過程中調用 RETURN 語句返回的值,調用此語句也就代表存儲過程返回了,執行完畢
一般如果只需要存儲過程返回一個值,那麼使用RETURN就行了
如果需要多個值,那麼就需要OUTPUT參數交互取值
也就是說OUTPUT和RETURN取得的效果是相同的
8. sqlserver怎麼獲取存儲過程的返回值
1.OUPUT參數返回值
CREATEPROCEDURE[dbo].[nb_order_insert](
@o_buyeridint,
@o_idbigintOUTPUT
)
AS
BEGIN
SETNOCOUNTON;
BEGIN
INSERTINTO[Order](o_buyerid)
VALUES(@o_buyerid)
SET@o_id=@@IDENTITY
END
END
2.存儲過程中獲得方法:
DECLARE@o_buyeridint
DECLARE@o_idbigint
DECLARE@resultbit
EXEC@result=[nb_order_insert]@o_buyerid,o_idoutput
3.SELECT 數據集返回值
CREATEPROCEDURE[dbo].[nb_order_select](
@o_idint
)
AS
BEGIN
SETNOCOUNTON;
SELECTo_id,o_buyeridFROM[Order]
WHEREo_id=@o_id
GO
9. Entity Framework 5.0 調用存儲過程 返回值為什麼是int類型
存儲過程的返回值類型固定為int類型,不支持其它類型,函數才可以返回多樣化類型。如果你要通過存儲過程傳遞數據出來,請使用輸出型參數。
這是SQL的基礎知識,和C#無關。