1

여기에 문제가 있습니다.Sql 서버 저장 프로 시저의 결과 집합에 연결

정규화 된 데이터를 표준 데이터 집합으로 변환하는 저장 프로 시저가 있습니다.

보기로 구성된 일부 데이터와 다른 매개 변수가 다른 열을 반환하는 저장 프로 시저에 제출되는 저장 프로 시저의 두 데이터 집합에 대해보고해야합니다.

예 내보기 같은 것을 포함하면

:

ID Title Status Date 
1 How To Party Like a rockstar Approved 7/15/1989 
2 Too much of a good thing Approved 7/25/2001 
3 Needs More Cowbell Denied 11/11/2011 
4 Here Today Gone Tommorrow Approved 8/13/1969 
5 The way She moves Approved 12/13/2011 

그리고 하나 paramater 반환과 절차 실행 :

ID Do you like the ice Cream? How much would you pay for the ice cream? 
1 Yes 2 
2 Yes 5 
3 Yes 7 
4 No 2 
5 No 3 

그리고 다른 매개 변수를 반환과 동일한 절차 실행 :

ID Total Number of Bell Peppers Total Number of Apples Total Number of Oranges 
1 7 6 6 
2 6 8 8 
3 32 7 5 
4 7 3 1 
5 12 1 1 
저장 프로 시저 인해에 인라인 SQL로 수행 할 수 없음을 염두에

ID Title Status Date Do you like the ice Cream? How much would you pay for the ice cream? Total Number of Bell Peppers Total Number of Apples Total Number of Oranges 
1 How To Party Like a rockstar Approved 7/15/1989 Yes 2 7 6 6 
2 Too much of a good thing Approved 7/25/2001 Yes 5 6 8 8 
3 Needs More Cowbell Denied 11/11/2011 Yes 7 32 7 5 
4 Here Today Gone Tommorrow Approved 8/13/1969 No 2 7 3 1 
5 The way She moves Approved 12/13/2011 No 3 12 1 1 

키핑을 : 내가지고 가야 할 방법은 ID 열이 데이터 세트를 결합하는 데 사용할 수있는 키라고 가정

정규화의 성격과 정규화의 변환에 대해 설명하고 있으며, 저장 프로 시저가 전달 될 매개 변수에 따라 다양한 수의 열을 반환한다는 사실 때문에 테이블 변수 udf로 수행 할 수 있다고 생각하지 않습니다. 그것은 실행됩니다 (누군가가 이것에 대해 틀리게 증명할 수 있고 역동적 인 컬럼 테이블 값을 가진 udf의 방향으로 나를 가리킬 수 있다면 매우 감사 할 것입니다)

만약 내가보기 및 두 저장 프로 시저를 하나의 저장 프로 시저로 가져 와서 그 방식으로 데이터 집합을 반환 할 수 있다면 그것은 내 궁극적 인 목표가 될 것입니다.

나는 또한 임시 분산 쿼리는이 서버를 켤 수 없습니다 (나의 결정) 스튜어트 워스의 대답에서 약간의 도움으로

해상도

내가 일을 할 수 있었다 언급 할 필요가 그것. 모든 것에 대한 나의 초기 문제점은 각 열의 크로스 탭 테이블에 대해 열이 동적이었습니다. 그 일환으로 나는이 경우 9 제가가 짓고 있어요하는 항목을 알 수 있습니다 매개 변수는 쉼표 deliminated 문자열로 열을 반환하는 함수 ...

 DECLARE 
      @PivotColumns VARCHAR(MAX) 

     SET @PivotColumns = dbo.fnGetFormPivotColumns(9) 

을 만들었다 있도록 . 거기에서 그렇게 나는이 함께했다 동적으로 임시 테이블을 구축 할 수있는 기본 SP의 기능 만 반복했다 :

IF object_id('tempdb..#temp_DEP') IS NOT NULL 
    DROP TABLE #temp_DEP 


CREATE TABLE #temp_DEP (APPLICATION_ID int) 
EXEC ('ALTER TABLE #temp_DEP ADD ' + @PivotColumns) 

INSERT INTO #temp_DEP 
    EXEC GetFormCrossTab 9 

간단한 SELECT * #temp_DEP는 내가 갖는 것을 보여준다로부터 정확히 I 필요.

다른 매개 변수에 대한 프로세스를 반복하면 동일한 저장 프로 시저 내에서 두 데이터 집합을 얻을 수 있습니다.

+0

난 당신이로 실행되는 문제가 시저에서 변수 출력라고 생각합니다. http://stackoverflow.com/questions/653714/how-to-select-into-temp-table-stored-procedure 일관된 모양 인 경우 테이블에 결과를 삽입하고 그 결과를 함께 정리할 수 있습니다. . 그렇지 않으면, 당신은 복사 - 붙여 넣기 상속을 함께 논리의 모든 비트를 가지고 찾고 있다고 생각합니다. – billinkc

+0

유감스럽게도 Ad Hoc Distributed 쿼리가 꺼져 있고 나는 openrowset/opendatasource 옵션을 사용할 수 없으므로이 옵션을 사용할 수 없습니다. – Patrick

답변

1

당신은 예를 들어, 저장 프로 시저를 구축하고 각 매개 변수를 충족하기 위해 IF 문을 사용할 수

CREATE PROC someproc @parameter AS 

CREATE TABLE #scratch1 (columns)... 
CREATE TABLE #scratch2 (columns)... 

IF @parameter = 1 
BEGIN 
INSERT INTO #scratch1 
exec oldproc @parameter 
END 

IF @parameter = 2 
BEGIN 
INSERT INTO #scratch1 
exec oldproc @parameter 
END 


SELECT * 
FROM view v 
LEFT JOIN #scratch1 s1 ON v.ID =s1.ID 
...etc 
+0

임시 테이블을 동적으로 작성하는 것을 선호합니다 ... 이론적으로는 무제한의 매개 변수가 될 수 있습니다 ...이 보고서에서는 다시 2 개의 특정 항목 만 될 것입니다 ... 그래서이 특정 보고서, 나는 더 역동적 인 솔루션을 기대하고있었습니다. – Patrick

+0

그 중 하나는 저장 프로 시저 중 하나를 13 열 및 열 이름에 대한 문구가 종종 – Patrick

+0

자주 변경하는 경향이 같은 것을 반환합니다 ... 내가 동적으로 임시 테이블을 빌드하는 기본 sp에서 코드를 가져 가면 ... 그리고보고해야 할 보고서를 부모 학부모에게 제출하십시오 ... 병이 들었습니다. – Patrick

1

전달 된 매개 변수에 따라 조건부 결과 집합을 사용하여 결과를 두 개의 스크래치 테이블 중 하나에 삽입 할 수 있습니까?

그런 다음보기를 스크래치 테이블에 조인하는 다른 저장 프로 시저를 작성할 수 있습니다.

exec stored_proc_with_conditional_output 

select * from 
view v 
left outer join scratch1 s1 on v.ID = s1.ID 
left outer join scratch2 s2 on v.ID = s2.ID 
+0

나는 그것을 유일하게 만들고 그것으로부터 질의하기 위해 매개 변수를 사용하여 임시 테이블을 생성하는 것을 볼 수 있었다 ... 그러나 호출 sp가 완료되었을 때 임시 테이블을 그냥 파괴하려하지 않았다? 그 생각은 ... 어쩌면 글로벌 임시 테이블은 사용하기에 충분히 오래 살아남을 수 있습니다. – Patrick

+0

임시 테이블은 개별 sproc에 적용될 수 있습니다. 그렇다면 sproc을 한 번에 두 번 이상 호출 할 수있는 경우 실제 테이블을 사용하고 동시성 문제를 고려해야합니다. SQL Server 2008 이상을 사용하는 경우 테이블 변수를 사용할 수도 있습니다. – jmacinnes

+0

나는 테이블 변수를 사용할 것이지만 동적으로 디커플링 할 방법을 찾을 수 없다. 비록 내가 temp 테이블을 다이내믹하게 구성하고있다하더라도 ... 내가 figgure로 작성했다면 어떻게 사용하는지 제안 할 것이다. 저장 프로 시저의 출력 매개 변수로? 그게 효과가 있니? – Patrick

0

당신은 쿼리를 실행하고 LINQ와 함께 분쇄해야합니다

예컨대,이 새로운 저장 프로 시저 될 것이다. 이것은 매우 빠르며 "온 디맨드 (on demand)"를 실행하도록 설정 될 수 있으므로 메모리와 처리 공간은 작아야합니다.

이 작업을 수행하는 방법에 대한 예가 필요합니까 - 아니면 충분한 제안입니까?

+0

.net에서 이것을 사용했다면 아마 문제가되지 않을 것입니다 ...하지만 SSRS 보고서에 갈 필요가 있습니다 ... 그리고 ssrs에 linq를 구현하려고하지 않을 것입니다 (가능, 나도 몰라.) – Patrick

+0

@Patrick - point taken - 유용하다고 생각할지도 모르는 다른 사람들을 위해 나중에 참고할 것입니다. – Hogan

관련 문제