
sqlserver中如何在用户定义的函数里使用exec?
sqlserver中的用户定义函数不能使用不确定函数,exec就是一个不确定函数。网上有人说改成存储过程,但是我需要在sql语句中使用函数返回的值。请问有什么办法没有?谢...
sqlserver中的用户定义函数不能使用不确定函数,exec就是一个不确定函数。网上有人说改成存储过程,但是我需要在sql语句中使用函数返回的值。请问有什么办法没有?谢谢了
展开
1个回答
展开全部
这里我举个例子,假如有一个函数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 Procedure dbo.NumAdd1
GO
CREATE Procedure 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 Procedure dbo.NumAdd2
GO
CREATE Procedure 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等函数中不能使用的内容。
这个解释你明白了吗?
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 Procedure dbo.NumAdd1
GO
CREATE Procedure 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 Procedure dbo.NumAdd2
GO
CREATE Procedure 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等函数中不能使用的内容。
这个解释你明白了吗?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?

2022-08-05 广告
苏州蓝晓生物科技有限公司。标准化核心产品:公司拥有完整的琼脂糖介质、葡聚糖介质、聚甲基丙烯酸酯介质生产线,年产分离介质50000L,产品质量稳定并达到国际领先水平。核心优势:公司核心技术人员拥有近二十年不同基质的基球开发和官能化的丰富技术经...
点击进入详情页
本回答由苏州蓝晓生物科技有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询