sql存储过程返回值
Ⅰ sql存储过程怎么返回string类型的返回值怎么返回多个值
1.如果是返回一个值,可以在存储过程里增加参数进行返回,如:
create proc aaa(@ReturnValue varchar(100) output)
……
你在存储过程里设置@ReturnValue的值就行了。
VB里运行存储过程,然后访问ReturnValue参数就行了。
2、如果是返回多列数据,就直接在存储过程里select表,VB里运行存储过程后,可以获取返回表。
Ⅱ sqlalchemy 调用 mssql存储过程如何获取返回值
请参参考以下代码:
from pyodbc import drivers, connect, Connection, Cursor
def output_cursor(cursor: Cursor):
...."""打印输出当前结果集"""
....print('-' * 80)
....print(','.join(_[0] for _ in rst.description))
....for row in cursor:
........print(row)
spt = '''
declare @returns int,@count int,@lastDoTime datetime
exec @returns = test_proc_call @count output,@lastDoTime output
select @returns returns,@count count,@lastDoTime lastDoTime
'''
cur = db.execute(spt)
for rst in iter_cursor(cur):
....output_cursor(rst)
输出:
--------------------------------------------------------------------------------
returns,count,lastDoTime
(18, 21, datetime.datetime(2020, 3, 4, 14, 43, 46, 923000))
存储过程:test_proc_call
create procere test_proc_call
(@p1 int output
,@p2 datetime output
)
as
begin
--此过程有返回值,有output参数,有结果集
select @p1=max(id),@p2=max(LastDoTime)
from Tasks with(nolock)
select * from Tasks with(nolock)
return @@rowcount
end
Ⅲ 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
Ⅳ Pl/sql存储过程中 游标返回值问题
看到你刚才的问题了,看看我的回答,
补充:刚测了下,如果创建的是临时表,用create as select * from xxx,是没有数据的
创建后再执行一次插入
DECLARE
psqlstr VARCHAR2(200);
stmp VARCHAR2(200);
tname VARCHAR2(30);
BEGIN
tname := 'temp_s1'; -- 临时表名
stmp := 'select * from t1 where 1=1'; -- t1为源表,stmp为从源表查询数据的sql
psqlstr := 'create global temporary table '||tname||' as '||stmp;
EXECUTE IMMEDIATE psqlstr; -- 创建成功,但是临时表中无数据
psqlstr := 'insert into t1_temp '||stmp; -- 再插入一次数据
EXECUTE IMMEDIATE psqlstr;
END;
Ⅳ 取一个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')
Ⅵ sql 存储过程中return的使用方法
RETURN语句无条件终止查询、存储过程或批处理。存储过程或批处理中RETURN语句后面的语句都不执行。
当在存储过程中使用RETURN语句时,此语句可以指定返回给调用应用程序、批处理或过程的整数值。如果 RETURN 未指定值,则存储过程返回 0。
大多数存储过程按常规使用返回代码表示存储过程的成功或失败。没有发生错误时存储过程返回值 0。任何非零值表示有错误发生。
调用存储过程的应用程序可以将返回代码所对应的参数标记与整型变量绑定。
(6)sql存储过程返回值扩展阅读:
如果用户定义一个函数有返回类型,可以像下面这样调用:
intfunc(){intvalue;??????returnvalue;}intmain(){intintvalue;intvalue=func();????return0;}
1、在返回类型是char的函数中,return后应该是char类型的值。
2、在返回类型是int的函数中,如果是要停止函数的调用,最好应该为0。
3、在返回类型是结构类型的函数中,return后应该是结构的一个实例对象。
总之,函数定义为什么样的返回类型,该函数中return后就应该是相应类型的值。
如果实在不需要函数返回什么值,就需要用void声明其类型。
补充:如果用户函数名前有返回类型定义,如int,double等就必须有返回值,而如果是void型,则可以不写return,但这时即使写了也无法返回数值。
Ⅶ 在sql Server中~如何利用RETURN返回存储过程的值~~~
从存储过程返回非表类型的值有二种方法:
1.存储过程使用return语句返回值.此种情况下,接收该存储过程值的方法是:
delcare @ReturnValue int /*(与存储过程return语句返回值的类型相同)*/
exec @ReturnValue = StoredProc /*StoredProc为一个存储过程*/
2.存储过程使用OUTPUT输出参数.此种情况下,直接使用OUTPUT输出参数即可:
declare @id int
set @id = 1
exec StoreProc @id OUTPUT /*StoredProc为一个存储过程*/
select @id