调用存储过程返回值
当@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#无关。