0

パラメータを渡すストアド プロシージャがあります。パラメータ タイプは「構造化」されており、ユーザー定義のテーブル タイプを使用します。テーブルタイプはこんな感じのカットダウンバージョン。

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)
)

実際のテーブルはこれと一致します (同じ精度など) が、10 進数値を丸めます。間違った SQL グルとは何ですか?

4

2 に答える 2

0

このサンプルに対してどのように使用しているかを確認してください。

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
于 2012-09-26T04:33:02.187 に答える
0

floatの代わりに変数型を試すことができますnumeric

また、プログラムからストアド プロシージャにdecimal/変数を渡すようにしてください。double

于 2012-09-26T04:40:36.583 に答える