Sql 用户定义函数调用与在存储过程中调用UDF
我有一个在存储过程中调用的用户定义函数。存储过程只返回从UDF标量函数获得的值 但是,Sql 用户定义函数调用与在存储过程中调用UDF,sql,sql-server,Sql,Sql Server,我有一个在存储过程中调用的用户定义函数。存储过程只返回从UDF标量函数获得的值 但是, Select * UDF_FunctionName(param1,param2) udf电话在这里- SELECT dbo.udfFunction('1234',10) as result 及 结果不同 StoreProcName调用'UDF_FunctionName(param1,param2) 存储过程代码在这里- BEGIN SET NOCOUNT ON; Return SELECT [
Select * UDF_FunctionName(param1,param2)
udf电话在这里-
SELECT dbo.udfFunction('1234',10) as result
及
结果不同
StoreProcName
调用'UDF_FunctionName(param1,param2)
存储过程代码在这里-
BEGIN
SET NOCOUNT ON;
Return SELECT [DbName].[dbo].[udfFunction](@param1, @param2)
END
产生不同结果的原因可能是什么?您试图同时使用
返回
和选择
:
Return SELECT [DbName].[dbo].[udfFunction](@param1, @param2)
您不能这样做,您可以返回结果,也可以选择它。根据您选择的类型,检索值将有所不同
如果您这样做:
SELECT [DbName].[dbo].[udfFunction](@param1, @param2)
RETURN [DbName].[dbo].[udfFunction](@param1, @param2)
然后结果集将有一行和一列包含您的值。像访问任何其他结果集一样访问此结果集
如果您这样做:
SELECT [DbName].[dbo].[udfFunction](@param1, @param2)
RETURN [DbName].[dbo].[udfFunction](@param1, @param2)
存储过程将有一个返回值,它是函数调用的结果。通过定义一个标量变量并将其分配给SP调用的结果来访问它-假设结果是
DECLARE @result INT
EXEC @Result = StoredProcName(@param1, @param2)
在存储过程中不应以这种方式使用
RETURN
。如果要向调用代码返回标量值,请使用<代码>返回为空
你可能有
-- SAMPLE UDF
CREATE FUNCTION dbo.YourUDF (@Username VARCHAR(30), @EntityID INT)
RETURNS INT
AS
BEGIN
RETURN @EntityID;
END
GO
-- SAMPLE PROCEDURE
CREATE PROCEDURE dbo.YourProc @Username VARCHAR(30), @EntityID INT, @Output INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SET @Output = dbo.YourUDF(@Username, @EntityID);
IF @Output IS NULL -- AN ERROR
BEGIN
RETURN 1; -- RETURN A STATUS OF -1 TO INDICATE ERROR
END
END
那么你可以称之为:
DECLARE @Output INT, @ReturnValue INT;
EXECUTE @ReturnValue = dbo.YourProc
@Username = '1234',
@EntityID = 1,
@Output = @Output OUTPUT;
SELECT ValueFromUDF = @Output,
ReturnValue = @ReturnValue;
这将返回:
ValueFromUDF ReturnValue
------------------------------
1 0
如果我们将NULL
传递为@EntityID,以触发人为错误,那么我们得到的返回状态为-1:
DECLARE @Output INT, @ReturnValue INT;
EXECUTE @ReturnValue = dbo.YourProc
@Username = '1234',
@EntityID = NULL,
@Output = @Output OUTPUT;
SELECT ValueFromUDF = @Output,
ReturnValue = @ReturnValue;
ValueFromUDF ReturnValue
------------------------------
NULL 1
这肯定需要一个新的解决方案。试一试如果法律允许您显示,我们需要查看结果和代码。您的结果是什么/函数的结果和存储过程的结果有何不同?是的,我不允许合法显示。它只是返回一个正确或错误的答案。但是从sql的角度来看,这两个语句之间有什么区别吗?。抱歉,无法提供更多信息。您不需要向我们显示您的实际代码!您需要向我们展示一个如何重现该问题的示例。否则这是无法回答的。