【问题标题】:How do I pass decimals to stored procedure without decimals rounding?如何在没有小数舍入的情况下将小数传递给存储过程?
【发布时间】:2012-09-26 03:59:51
【问题描述】:

嘿,我有一个向其传递参数的存储过程。参数类型是“结构化的”并使用用户定义的表类型。表格类型看起来像这个精简版。

CREATE TYPE dbo.LineItem_TYPE AS TABLE
(

UnitTrade numeric (22,4), 
TotalBuy numeric (22,4),
TotalSell numeric (22,4), 
GrossProfit numeric (22,4), 
QuoteReference varchar (255)
)

实际的表与此匹配(相同的精度等),但对十进制值进行四舍五入。什么是错误的 SQL 大师?

【问题讨论】:

  • 请显示有问题的代码...

标签: sql stored-procedures parameters user-defined-types


【解决方案1】:

检查您如何针对此示例使用它。

CREATE TYPE dbo.LineItem_TYPE AS TABLE
(
    UnitTrade numeric (22,4), 
    TotalBuy numeric (22,4),
    TotalSell numeric (22,4), 
    GrossProfit numeric (22,4), 
    QuoteReference varchar (255)
);
GO
CREATE TABLE LineItem
(
    UnitTrade numeric (22,4), 
    TotalBuy numeric (22,4),
    TotalSell numeric (22,4), 
    GrossProfit numeric (22,4), 
    QuoteReference varchar (255)
);
GO
create proc dbo.uspInsertLineItem
@li dbo.LineItem_TYPE READONLY
AS
    set nocount on;
    insert LineItem
    select *
    FROM @li;
GO
declare @li dbo.LineItem_TYPE;
insert @li select
1.23451234,123456789.1111,10.50,1,'Quote1' union all select
999999999999999999.9999,1.1,2.2,null,'Quote1';
exec dbo.uspInsertLineItem @li;
GO
select * from LineItem

------- results

UnitTrade                TotalBuy        TotalSell  GrossProfit  QuoteReference
------------------------ --------------- ---------- ------------ ---------------
1.2345 ****              123456789.1111  10.5000    1.0000       Quote1
999999999999999999.9999  1.1000          2.2000     NULL         Quote1

您可以看到所有数字都忠实地存储到正确的小数位数,除了标记为 ** 的单数数字。我们将1.23451234 放入@li,因为它是numeric(22,4),所以它在输入用户类型时已经是1.2345。看到这个:

declare @li dbo.LineItem_TYPE;
insert @li (UnitTrade)
select 1.23451234;
select UnitTrade from @li

--------- result

UnitTrade
---------------------------------------
1.2345

【讨论】:

    【解决方案2】:

    您可以尝试使用变量类型float 而不是numeric

    还要确保将decimal/double 变量从程序传递给存储过程。

    【讨论】:

      猜你喜欢
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 2013-11-10
      相关资源
      最近更新 更多