我有一个sp“spGetNewNumber”,它返回一个值作为新数字,如下所示:
USE [MyPhoneDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spsRouteRules_getNewNumber]
@oldNumber NVARCHAR(15),
@newNumber NVARCHAR(15) = '0' OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT newTellNo as newNumber FROM changedPhones WHERE oldTelNo = @oldNumber;
END
现在我需要一个Function可以调用这个存储过程并从sp。
返回值我尝试使用stackoverflow中的代码,如下所示:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION fnGetNewNumber
(
@oldNumber bigint
)
RETURNS bigint
AS
BEGIN
-- Declare the return variable here
DECLARE @returnValue bigint
DECLARE @SQL varchar(500)
SELECT @SQL = 'osql -S' +@@servername +' -E -q "exec spsRouteRules_getNewNumber ' + CONVERT(nchar, @oldNumber)
-- SELECT @SQL
EXEC master..xp_cmdshell @SQL,'@returnValue bigint output', @returnValue output
-- Return the result of the function
RETURN @returnValue;
END
GO
但没有回答这个功能和方法。
答案 0 :(得分:0)
您必须使用函数而不是存储过程才能获得新值。
CREATE FUNCTION [dbo].[spsRouteRules_getNewNumber](@oldNumber NVARCHAR(15))
RETURNS NVARCHAR(15)
AS BEGIN
SET NOCOUNT ON;
RETURN ISNULL(SELECT TOP 1 newTellNo FROM changedPhones WHERE oldTelNo = @oldNumber),0);
END
您无法在函数内调用用户定义存储过程。您只能在另一个存储过程中调用存储过程。