动态转换SQL Server函数

我想创建一个函数,该函数基本上将浮点数或整数值转换为特定长度和精度的十进制。

我已经在下面编写了代码,但是似乎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
tianjing_anbey 回答:动态转换SQL Server函数

不允许从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))
本文链接:https://www.f2er.com/3166143.html

大家都在问