2009-07-24 74 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 

所以我的問題是,由於存儲過程顯然返回正確的結果,爲什麼當我將它們插入到表變量中時,它只插入結果的第一列,並在後續列上給出全零?有沒有這個我不知道的一些已知問題?我甚至嘗試:

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

它得到相同的結果...
我甚至嘗試倒退,並試圖臨時表(創建表#whatever)......還是一樣的結果......什麼我錯過了嗎?

我只是想知道...如果CostProcedure裏面有一個StoredProcedure,它將一個值寫入臨時表,就像上面一樣,也許在存儲過程的寫入級別上有一些限制到臨時表?

+0

這是我的一個鑄造問題嗎?存儲過程結果集中列的數據類型是什麼? – MyItchyChin 2009-07-24 17:44:24

+1

我確定這不是問題,但@RootId = 123之後不應該有逗號? – devuxer 2009-07-24 17:51:08

回答

0

我找到了解決方法,我更改了所需的存儲過程,以返回標量輸出而不是數據集。 ..不是我想要的,而是達到目的!

2

那裏可能有一個奇怪的數據轉換問題。存儲過程是否返回像表一樣定義的REAL,或者它們是NUMERIC還是其他?

確保數據類型一致。

,你可以在存儲過程中使用這樣的事情做一些測試:

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

告訴你到底是返回什麼(更換「劇組(12345.6789爲十進制(9,4)」與您返回的列值),只是從存儲過程中輸出這些值,並使表中的列匹配,然後再試一試