我创建的函数可以将任何货币转换为£POUND Sterling。实际上,任何货币都限于功能中定义的货币。
该函数创建良好,但是当我在字段上的select语句中使用该函数给我提供基于枯萎率的汇率时,该地区为UK / UAE / JAP等
我收到以下错误:
信息8115,第16级,状态8,第2行
将int转换为数值数据类型的算术溢出错误。
逻辑很好,请问如何获取数据类型?
选择语句以使用该功能
SELECT RegionCode
,VALUE
,[dbo].[fnCurrencyConvertee](RegionCode) * VALUE
FROM temp.dbo.Treasurey
功能代码-重要提示,以下代码现已正确且可以正常工作,感谢大家的贡献
USE [temp]
GO
CREATE FUNCTION [dbo].[zsCurrencyConvertee]
(@inPutRegionCode_column VARCHAR(5))
RETURNS DECIMAL(38,2)
AS
BEGIN
DECLARE @Convert DECIMAL(20,2)
DECLARE @Default DECIMAL(20,2) --Default currency is £,
DECLARE @UK DECIMAL(20,2)
DECLARE @TURK DECIMAL(20,2) --TURKEY
DECLARE @AFG DECIMAL(20,2)
DECLARE @MEX DECIMAL(20,2) --MEXICO
DECLARE @MOR DECIMAL(20,2) --MOROCCO
DECLARE @UAE DECIMAL(20,2)
DECLARE @IRA DECIMAL(38,2) --IRAQ
DECLARE @JAP DECIMAL(20,2)
DECLARE @CHI DECIMAL(20,2)
SET @Convert = 0.00 --Variable which will be reused to hold converted values
SET @Default = 1.00 --Reset this value if the conversion is required between other currencies such as UAE to JAPANESE etc
SET @UK = 1
SET @TURK = 6.87
SET @AFG = 97.58
SET @MEX = 24.69
SET @MOR = 12.31
SET @UAE = 4.73
SET @IRA = 1536.43
SET @JAP = 141.15
SET @CHI = 8.75
BEGIN
IF(@inPutRegionCode_column = 'UK')
BEGIN
SET @Convert = @Default / @UK
END
ELSE IF(@inPutRegionCode_column = 'TURK')
BEGIN
SET @Convert = @Default / @TURK
END
ELSE IF(@inPutRegionCode_column = 'AFG')
BEGIN
SET @Convert = @Default / @AFG
END
ELSE IF(@inPutRegionCode_column = 'MEX')
BEGIN
SET @Convert = @Default / @MEX
END
ELSE IF(@inPutRegionCode_column = 'MOR')
BEGIN
SET @Convert = @Default / @MOR
END
ELSE IF(@inPutRegionCode_column = 'UAE')
BEGIN
SET @Convert = @Default / @UAE
END
ELSE IF(@inPutRegionCode_column = 'IRA')
BEGIN
SET @Convert = @Default / @IRA
END
ELSE IF(@inPutRegionCode_column = 'JAP')
BEGIN
SET @Convert = @Default / @JAP
END
ELSE IF(@inPutRegionCode_column = 'CHI')
BEGIN
SET @Convert = @Default / @CHI
END
END
RETURN
@Convert
END
]
表格(如果需要)
USE [temp]
GO
CREATE TABLE Treasurey
(
RegionCode VARCHAR(5),
Value INT
)
INSERT [dbo].[Treasurey] ([RegionCode], [Value]) VALUES (N'TURK', 23)
INSERT [dbo].[Treasurey] ([RegionCode], [Value]) VALUES (N'AFG', 55)
INSERT [dbo].[Treasurey] ([RegionCode], [Value]) VALUES (N'UK', 33)
INSERT [dbo].[Treasurey] ([RegionCode], [Value]) VALUES (N'MOR', 100)
INSERT [dbo].[Treasurey] ([RegionCode], [Value]) VALUES (N'UAE', 150)
INSERT [dbo].[Treasurey] ([RegionCode], [Value]) VALUES (N'IRA', 200)
INSERT [dbo].[Treasurey] ([RegionCode], [Value]) VALUES (N'JAP', 23)
INSERT [dbo].[Treasurey] ([RegionCode], [Value]) VALUES (N'CHI', 49)
答案 0 :(得分:3)
您正在使用decimal (2,2)
,这意味着可以容纳的最大数字为0.99。但是,您正在尝试放入更大的数字。
DECLARE @IRA DECIMAL(2,2) --IRAQ
SET @IRA = 1536.43
使变量声明更大。至少基于此样本数据decimal(6,2)
...但是您可能需要大得多的decimal(38,2)
,才能说明更大的数字范围。
DECLARE @IRA DECIMAL(6,2) --IRAQ
SET @IRA = 1536.43