我想创建一个函数,该函数基本上将浮点数或整数值转换为特定长度和精度的十进制。
我已经在下面编写了代码,但是似乎CAST
不允许使用DECIMAL
函数进行变量操作:
CREATE OR ALTER FUNCTION dbo.DECI(@in as sql_variant,@len as int,@prec as int)
returns sql_variant
as
begin
return CAST(@in as decimal(@len,@prec))
end
我想创建一个函数,该函数基本上将浮点数或整数值转换为特定长度和精度的十进制。
我已经在下面编写了代码,但是似乎CAST
不允许使用DECIMAL
函数进行变量操作:
CREATE OR ALTER FUNCTION dbo.DECI(@in as sql_variant,@len as int,@prec as int)
returns sql_variant
as
begin
return CAST(@in as decimal(@len,@prec))
end
不允许从SQL_VARIANT
到大多数类型(包括DECIMAL
)的隐式转换,因此无论如何,您都必须在大多数查询中进行显式转换
例如,当您尝试在INSERT
语句中使用它时
DECLARE @TestTable TABLE
(
DecimalCol DECIMAL(3,2)
);
INSERT INTO @TestTable
(
DecimalCol
)
VALUES
(dbo.DECI(1.1,3,2))
您将面临以下错误消息:
第3级第44行第257级消息257 不允许从数据类型sql_variant隐式转换为十进制。使用CONVERT函数运行此查询。
现在,您必须将查询更新为:
INSERT INTO @TestTable
(
DecimalCol
)
VALUES
(CONVERT(DECIMAL(3,2),dbo.DECI(1.1,2)))
在这一点上,您什么都没做,只是性能杀手。
直接在查询中进行操作:
INSERT INTO @TestTable
(
DecimalCol
)
VALUES
(CONVERT(DECIMAL(3,1.1))