2009-07-24 9 views
1

は、ストアドプロシージャから結果を取得し、一時テーブルに入れてある...ストアドプロシージャの私が何をしようとしている

は次のようになります。だから、

DECLARE @Table TABLE(
[ID] int, 
[CostA] real, 
[CostB] real, 
[CostC] real 
) 

INSERT INTO @Table 
EXECUTE [dbo].[CostProcedure] 
     @RootId = 123 
     @Rate = 20 

--THEN: 
SELECT * FROM @Table  -- Gives Me: 

ID  CostA CostB CostC 
10  0  0  0 

-- HOWEVER 
EXECUTE [dbo].[CostProcedure] 
     @RootId = 123 
     @Rate = 20 

--GIVES ME 
ID  CostA CostB CostC 
10  1.0987 0.9837 0.65463 

私の質問は、ストアドプロシージャは明らかに適切な結果を返すので、なぜ、テーブル変数に挿入すると結果の最初の列だけが挿入され、後続の列にすべて0が返されますか?私が知らないこれに関する既知の問題はありますか?私も試してみました:

INSERT INTO @Table([ID],[CostA],[CostB],[CostC]) 
EXECUTE [dbo].[CostProcedure] 
      @RootId = 123 
      @Rate = 20 

それは同じ結果をもたらした...私も先祖返りを試みたが、それでも同じ結果を一時テーブル(テーブル#whateverを作成します)...を試してみました
...何私は行方不明ですか?

私はちょっと疑問に思っています... CostProcedureがその内部にStoredProcedureを持っていて、上記と同じ値をテンポラリテーブルに書き込む場合は、ストアドプロシージャをネストできるレベルの数に制限がありますテンポラリテーブルに?

+0

これはキャスト問題として私を襲う?ストアドプロシージャの結果セットの列のデータ型は何ですか? – MyItchyChin

+1

これは問題ではないと確信していますが、@RootId = 123の後にカンマがあってはいけませんか? – devuxer

+0

@CptSkippy、私はそれもそうだと思っていましたが、ほとんど何も実際に暗黙的に変換することができます(CASTまたはCONVERTする必要はありません)。確かに、例の数値は実数に変換される可能性があります。 – devuxer

答えて

0

回避策が見つかったので、必要なストアドプロシージャを変更して、データセットではなくスカラー出力を返しました。 ..私が望んでいたものではなく、終わりを意味する!

2

奇妙なデータ変換に問題がある可能性があります。ストアドプロシージャは、テーブルが定義したようにREALを返しますか?それともNUMERICなのですか?

データ型が一貫していることを確認してください。 (あなたと「のキャスト(小数点以下AS 12345.6789(9,4)」を置き換える返されている正確に何をお見せするために

SELECT SQL_VARIANT_PROPERTY(cast(12345.6789 AS decimal(9,4))+cast(5.678912 AS decimal(9,6)), 'BaseType') 
SELECT SQL_VARIANT_PROPERTY(cast(12345.6789 AS decimal(9,4))+cast(5.678912 AS decimal(9,6)), 'Precision') 
SELECT SQL_VARIANT_PROPERTY(cast(12345.6789 AS decimal(9,4))+cast(5.678912 AS decimal(9,6)), 'Scale') 

あなたはこのようなものを使用してストアドプロシージャ内でいくつかのテストを行うことができます

+0

私の考えは正確ですが、あなたはそれが私が行っていたよりも優れていました。 – HLGEM

+0

ええ、私はこれを考慮したので、返す前にデータ型を微調整し、実際の型をproc(小数点(8,8))から試してみました。そして、それらをvarchar、realなどに変換しようとしました...役に立った! – Praesidium

関連する問題