有時候也會透過RETURN來回傳一個數值。
但有些人可能不知道 : 透過RETURN只能回傳 INT 大小的數值(-2,147,483,648 to
2,147,483,647)
如果數值超過此大小便會發生Overflow的exception。
即便你有宣告BIGINT、DECIMAL來承接參數。
我們來實際測試一下
CREATE PROCEDURE [dbo].[test]
AS
BEGIN
DECLARE @returnValue Numeric(20,4) = 0;
SET @returnValue = 9999999999999 --Greater than integar maximum size
RETURN @returnValue;
END
GO
EXEC dbo.Test
GO
DROP PROCEDURE dbo.Test
解決方法 :
l 如果只是單純要回傳值,將原本RETURN取代為SELECT是最快的。
CREATE PROCEDURE [dbo].[test]
AS
BEGIN
DECLARE @returnValue Numeric(20,4) = 0;
SET @returnValue = 9999999999999 --Greater than
integar maximum size
SELECT @returnValue;
RETURN;
RETURN;
END
GO
l 如果你有外層Stored procedure需要承接從此Stored
prcoedure的參數,可以考慮用OUTPUT參數。
CREATE PROCEDURE [dbo].[test]
@outputVal Numeric(20,4) OUTPUT
AS
BEGIN
SET @outputVal = 9999999999999 --Greater than
integar maximum size
END
GO
DECLARE @val Numeric(20,4)
EXEC dbo.Test @val OUTPUT
SELECT @val
GO
DROP PROCEDURE dbo.Test
沒有留言:
張貼留言