當前位置:首頁 » 存儲配置 » sql存儲過程返回值

sql存儲過程返回值

發布時間: 2025-01-23 12:32:31

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

熱點內容
如何開啟電腦伺服器無法上網 發布:2025-01-23 17:37:06 瀏覽:391
安卓手機鎖了怎麼開 發布:2025-01-23 17:21:18 瀏覽:137
經濟學演算法 發布:2025-01-23 17:13:46 瀏覽:421
如何和軟體聯系伺服器 發布:2025-01-23 17:13:00 瀏覽:800
javacrc16演算法 發布:2025-01-23 17:11:31 瀏覽:225
編程加圖片 發布:2025-01-23 17:10:33 瀏覽:567
中國風網站源碼 發布:2025-01-23 17:05:56 瀏覽:680
pythonfilter用法 發布:2025-01-23 17:04:26 瀏覽:569
java轉number 發布:2025-01-23 16:58:11 瀏覽:477
解壓的英語作文 發布:2025-01-23 16:45:05 瀏覽:970