2009-07-24 5 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 또는 기타입니까?

데이터 유형이 일관성이 있는지 확인하십시오.

이 같은 것을 사용하여 저장 프로 시저 내에서 몇 가지 테스트를 할 수

: 정확히 반환되는 내용을 보여

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) AS '와 함께 반환 된 열 값) 저장 프로 시저에서이 값을 출력하고 테이블의 열을 일치시킨 다음 시도해보십시오.

+0

내 생각은 정확하게,하지만 당신은 내가 생각했던 것보다 더 잘했다. – HLGEM

+0

그래, 내가 이것을 고려, 그래서 그들을 반환하기 전에 데이터 유형을 조정, 난 proc (십진수 (8,8))에서 실제 유형을 시도하고 varchar, 실제 등으로 변환 해봤 ... 아니, avail ... 좋은 생각! – Praesidium

관련 문제