當前位置:首頁 » 編程語言 » sql函數exec
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql函數exec

發布時間: 2023-01-25 21:44:12

sqlserver中如何在用戶定義的函數里使用exec

這里我舉個例子,假如有一個函數dbo.NumAdd用來計算加法,那它可能是這樣的:
DROP FUNCTION dbo.NumAdd
GO
CREATE FUNCTION dbo.NumAdd
( @A SMALLINT,
@B SMALLINT
)
RETURNS INT
AS
BEGIN
DECLARE @Ret INT
SET @Ret = ISNULL(@A,0) + ISNULL(@B,0)
RETURN @Ret
END

你可以使用這樣的方式調用函數並得到返回值:
DECLARE @M INT
SET @M = dbo.NumAdd(500,700)
select @M

現在,把這個函數修改成第一種使用存儲過程的方式:
DROP Procere dbo.NumAdd1
GO
CREATE Procere dbo.NumAdd1
( @A SMALLINT,
@B SMALLINT,
@Ret INT OUTPUT
)
AS
BEGIN
SET @Ret = ISNULL(@A,0) + ISNULL(@B,0)
END
GO

那麼,你就可以通過下列的方法調用這個實際和函數dbo.NumAdd功能相同的存儲過程:
DECLARE @M1 INT
EXEC dbo.NumAdd1 500,600,@M1 OUTPUT
SELECT @M1

這種方法是對標量函數較好的處理方法,而且,一個存儲過程可以使用一個或者多個帶有OUTPUT的參數來返回值。

再看第二種方法修改為存儲過程的方式:
DROP Procere dbo.NumAdd2
GO
CREATE Procere dbo.NumAdd2
( @A SMALLINT,
@B SMALLINT
)
AS
BEGIN
DECLARE @Ret INT
SET @Ret = ISNULL(@A,0) + ISNULL(@B,0)
SELECT @Ret
END
GO

這樣,你就可以使用下面的方法來調用:

DECLARE @M2 INT
CREATE TABLE #Temp (Result INT)
INSERT #Temp EXEC dbo.NumAdd2 800,600
SELECT TOP 1 @M2 = Result FROM #Temp
DROP TABLE #Temp
SELECT @M2

列出的這兩種方法都是把函數改成存儲過程的方法,而且在存儲過程中可以使用EXEC、PRINT等函數中不能使用的內容。

這個解釋你明白了嗎?

Ⅱ 執行動態SQL語句的函數怎麼寫

執行動態SQL語句的函數怎麼寫
其實你這你都知道用函數實現不了的,因為你的輸入參數@SQL是動態的,那必須用exec執行,而函數里不能用exec。建議你用存儲過程實現,示例如下:

創建存儲過程:
create procere TEST
(
@SQL NVARCHAR(200),
@RE INT output
)
AS
BEGIN
set nocount on
if exists (select * from tempdb.dbo.sysobjects where xtype='U' and id=object_id('#test'))
drop table #test

create table #test(total int)
insert into #test
exec (@SQL)
select @RE=isnull(total,0) from #test
set nocount off
END

調用示例:
declare @RE int
exec TEST 'select 1+1',@RE output
PRINT @RE

結果:
2

Ⅲ sql 中exec 的含義和用法

執行意思,如果你創建了一個存儲過程名為Demo,而且裡面就是簡單查詢
create
proc
Demo
as
select
*
from
表名
執行上面語句,然後就創建了Demo
如果你想執行Demo,就用exec
Demo
就直接執行了select語句,相當於編程語言中的調用函數