我要做的是从存储过程中获取结果并将它们放入临时表...
看起来像这样:
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 :(得分: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')
显示返回的确切内容(用返回的列值替换“cast(12345.6789 AS decimal(9,4)”)。只需从存储过程输出这些值并使表的列匹配,然后给出试一试。
答案 1 :(得分:0)
我找到了一个解决方法,我更改了所需的存储过程以返回标量输出而不是数据集......不是我想要的,而是意味着结束!