SQL中獲得EXEC後面的sql語句或返回值的方法

2021-04-20 07:53:12 字數 1701 閱讀 1556

前言:在資料庫程式開發的過程中,我們經常會碰到利用exec來執行一段需要返回某些值的sql語句(通常是構造動態sql語句時使用),或者在乙個儲存過程中利用exec呼叫另乙個有返回值的儲存過程(必須獲得返回值),那麼如何獲得這些返回值呢?

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

上面的@rc這個sql語句的功能是找出特定時間段裡所有有空的教室數量以及這些教室所能容納的學生人數,因為涉及到動態的sql語句(@csql這句裡條件中有乙個列名是動態變化的)的構造,所以要放在exec裡執行,但是同時我又要返回2個結果,所以執行時的**為

exec sp_executesql @rc,n

'@a int output,@b int output',@cstucount

output,@ccount

output

--將exec的結果放入變數中的做法

這樣就將返回值放到了,@cstucount,@ccount兩個變數中,得到了我們想要的結果。

2.exec執行帶返回值的儲存過程的情況

我們來看乙個簡單的儲存過程:

create

procedure protest

(@name varchar(10),

@money int

output

)

asbegin

if(@name=

'1')

set @money=1000

else

set @money=2000

end這個只是乙個簡單的示例,這個儲存過程返回的是@money 這個引數的值,那麼當我們在另外乙個儲存過程中呼叫此儲存過程的時候如何獲取這個引數呢,方法如下:

declare @

m int

---用來接收返回值的變數

exec protest @name=

'1',@money=@

moutput

--一定要註名是output

就這麼簡單,我們就獲得了返回值。

SQL中獲得EXEC後面的sql語句或返回值的方法

sql中獲得exec後面的sql語句或返回值的方法 前言 在資料庫程式開發的過程中,我勱們經常會碰到學習利用exec來執行一段需要返回某些值的sql語句 通常是構造動態sql語句時使用 或者在乙個html儲存過程中利用exec呼叫另乙個html有返回值的儲存過程 必須獲得返回值 那麼如何獲得這些返回...

SQL 中如何去掉decimal欄位後面的0

當我們需要將 decimal 欄位的值轉為 varchar 型時,常常會遇到乙個問題 如果此字段有4位小數,那小數點後面都會自動被0補齊.例如 18.0000 或 12.0300.轉為 varchar 時後面的0仍然被保留.t sql如下 select top 3 a.el qty4 cast a....

SQL中join操作後面的on與where的區別

join關鍵字的作用是將多個表按一定的條件聯合起來,從而可以實現從多個表中獲取資料 在join後面可以接on條件和where條件,在這裡我主要就是說這兩者之間的差別 建立兩張簡單的用來測試的表並新增資料,如下所示,一張表名為id name,另一張表名為id age 首先看看不新增條件 t2.age ...