当前位置:首页 » 编程语言 » sql调用存储过程返回值
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql调用存储过程返回值

发布时间: 2022-03-01 23:01:25

1. sql存储过程的返回值

存储过程应该有返回值的,
问题应该出现在你vb6的调用语句中(第二个参数是输出类型的参数,
是否有正确设置).
你可以在查询分析器中执行此存储过程,
看看返回的结果.
还有,
此存储过程中的select语句最好加上top
1限制,
因为你只要判断是否能选到结果而已:
select
top
1
*
from
tb_package
where
packagenumber=@a

2. 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

3. 取一个SQL存储过程的返回值

当@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')

4. 如何使用SQL变量获取一个存储过程的返回值

createprocStuProc
@snamevarchar(100),
@IsRightintoutput//传出参数
as
ifexists(selectS#,Sname,Sage,Ssexfromstudentwheresname=@sname)
set@IsRight=1
else
set@IsRight=0
go

declare@IsRightint
execStuProc'赵雷',@IsRightoutput
select@IsRight

5. sql server 2008存储过程执行返回值-6是什么意思

存储过程返回的值是自己写存储过程就定义好的,返回的-6具体是什么得根据存储过程的具体功能才知道是什么意思,
比如说你存储过程 只是计算两个数据的和,那么返回的值-6就是两个数的和了
要解答详细还需要更多的信息

最好的办法 就是 把存储过程代码贴出来

6. C#调用sql存储过程插入返回值

好像有点麻烦 ~~ 我是这么写的,不知道对不对

create procere insert_country
@countrycode char(3),@country char(35)
as
begin
if (exists(select * from dbo.Country where cCountryCode=@countrycode))
insert into dbo.Country([cCountryCode],[cCountry]) values(@countrycode,@country)
end

调用如下:
private void btnInsert_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=(local);Initial Catalog=HR;Integrated Security=True";
try
{
SqlCommand cmd = new SqlCommand("exec insert_country @countrycode=@a,@country=@b",con);
SqlParameter sp1 = new SqlParameter("@a",@countrycode的值);
SqlParameter sp2 = new SqlParameter("@b",@country的值);
cmd.Parameters.AddRange(sq1,sq2)
con.Open();
int result = cmd.ExecuteNonQuery();
con.Close();
if (result > 0)
{
MessageBox.Show("添加成功");
}
else
{
MessageBox.Show("添加失败");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}

7. SQL存储过程返回值问题

USE [Test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
---------1
alter tablle dbo.Dim_Structure add updateSTATUS varchar(6)
go
---------1
ALTER PROCEDURE [dbo].[USP_ZJ_Dim]
AS
SET NOCOUNT ON;
BEGIN
declare @StructureType nvarchar(255)
declare @CatecodeID nvarchar(255)
declare @StructureCode nvarchar(255)
declare @Owner nvarchar(255)
declare @Email nvarchar(255)
---------------0
declare ZJ_dim cursor for
select [StructureType],[CatecodeID],[StructureCode],[Owner],[Email]
from test.dbo.lander
Open ZJ_Dim
Fetch next from ZJ_dim into @StructureType,@CatecodeID,@StructureCode,@Owner,@Email
While @@FETCH_STATUS=0
Begin
Update dbo.Dim_Structure
Set Owner =@Owner,Email=@Email
where StructureType=@StructureType and CatecodeID=@CatecodeID and StructureCode=@StructureCode
--------------------2
if @@rowcount>0
update dbo.Dim_Structure set updateSTATUS='sucess' where StructureType=@StructureType and CatecodeID=@CatecodeID and StructureCode=@StructureCode
else
update dbo.Dim_Structure set updateSTATUS='failer' where StructureType=@StructureType and CatecodeID=@CatecodeID and StructureCode=@StructureCode
--------------------2
Fetch next from ZJ_dim into @StructureType,@CatecodeID,@StructureCode,@Owner,@Email
End
Close ZJ_Dim
-----------3
deallocate ZJ_Dim
------------3
End

--1添加新列,如果有updateSTATUS字段就不用添加了,把我代码里的updateSTATUS换成已有字段名
--2我添加的代码

--3建议注销游标,游标不注销太耗费内存
--0可将1写道0的位置(不建议)

8. 在 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

9. SQL中存储过程调用存储过程,怎么取返回值

存储过程中的第一个参数 @title 将接收由调用程序指定的输入值,而第二个参数 @ytd_sales 将向调用程序返回该值。SELECT 语句使用 @title 参数以获得正确的 ytd_sales 值,并将该值赋予 @ytd_sales 输出参数。
CREATE PROCEDURE get_sales_for_title
@title varchar(80), -- This is the input parameter.
@ytd_sales int OUTPUT -- This is the output parameter.
AS
-- Get the sales for the specified title and
-- assign it to the output parameter.
SELECT @ytd_sales = ytd_sales
FROM titles
WHERE title = @title
RETURN
GO

10. 带返回值的sql语句(存储过程)

如果不喜欢用output参数的话,多个输出参数可以用表格的方式输出。
例如:
create procere proc_name
as
begin
declare @out_para1 int, @out_para2 nvarchar(20)
set @out_para1 = 100
set @out_para2 = N'摆渡浮桥'

select @out_para1 as 成绩, @out_para2 as 姓名

end