Sql 如何在不舍入小数的情况下将小数传递给存储过程?

Sql 如何在不舍入小数的情况下将小数传递给存储过程?,sql,stored-procedures,parameters,user-defined-types,Sql,Stored Procedures,Parameters,User Defined Types,嘿,我有一个将参数传递给的存储过程。参数类型为“结构化”,并使用用户定义的表类型。表格类型类似于此精简版本 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) ) 实际表格与此匹配(精度相同等

嘿,我有一个将参数传递给的存储过程。参数类型为“结构化”,并使用用户定义的表类型。表格类型类似于此精简版本

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专家出了什么问题?

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

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,因为它是一个
数字(22,4)
在输入用户类型时就已经是1.2345了。见此:

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

--------- result

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

您可以尝试使用变量类型
float
代替
numeric


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

请显示有问题的代码。。。