문제

내가 사용하여 SQL Server2005 년,그리고 나는 방법을 알고 싶 액세스하는 다른 결과 집 내에서 transact-sql.다음과 같은 저장된 절차에 반환하는 두 결과 집,어떻게 액세스할에서,예를 들어,다른 저장 프로시저는?

CREATE PROCEDURE getOrder (@orderId as numeric) AS
BEGIN   
    select order_address, order_number from order_table where order_id = @orderId
    select item, number_of_items, cost from order_line where order_id = @orderId
END

내가 필요할 수 있을 반복하 모두 결과를 개별적으로 설정.

편집:을 명확하게 질문하고 싶 테스트 절차를 저장.나는 설정의 저장 프로시저는 데 사용되는서 VB.NET 클라이언트는 반환 여러 결과합니다.이러한하지 않을 수 있으로 변경 테이블을 반환 함수,나는 수 없다는 사실에 변경 절차에서 모두.변화하는 절차는 옵션이 아닙니다.

그 결과 세트에 의해 반환되는 절차 동일하지 않은 데이터를 형태 또는 수의 열이 있습니다.

도움이 되었습니까?

해결책

짧은 대답입니다:당신은 그것을 할 수 없다.

T-SQL 없에 액세스하는 방법을 여러한 결과는 중첩된 저장 프로시저 전화를 변경하지 않고 저장 프로시저를 사용할 수 있습니다.

하는 경우에는 절차를 돌아오는 하나의 결과 삽입할 수 있습으로 임시 테이블 또는 변수 테이블의 구문은 다음과 같습니다.

INSERT INTO #Table (...columns...)
EXEC MySproc ...parameters...

당신이 사용할 수 있는 동에 대한 구문 절차의 여러 결과를 반환하는지만,그것은 것입니다 프로세스의 첫 번째 결과,나머지 삭제 될 수 있습니다.

다른 팁

나는 쉽게 할 수 있을 만들어 이 SQL2005CLR 저장 프로시저를 포함하는 내부합니다.

당신이 볼,새로운 SqlDataAdapter 것입니다.채운 다과 세트 sproc 으로 여러 테이블에 데이터 집합을 기본적으로 합니다.이러한 테이블의 데이터를 설정할 수 있습니다 삽입#Temp 테이블에서 호출 sproc 당신이 소원을 작성합니다. 합니다.ReadXmlSchema 당신의 스키마가 결과는 각각 설정합니다.

1 단계:쓰기 시작합 sproc 는 것이 데이터를 읽을에서 결과는 세 sproc

니다.별도의 테이블을 만들에 대한 각각의 결과에 따라 설정된 스키마.

CREATE PROCEDURE [dbo].[usp_SF_Read] AS
SET NOCOUNT ON;
CREATE TABLE #Table01 (Document_ID VARCHAR(100)
  , Document_status_definition_uid INT
  , Document_status_Code VARCHAR(100) 
  , Attachment_count INT
  , PRIMARY KEY (Document_ID));

b.이 시점에서 필요할 수 있습을 선언하는 커서를 반복적으로 호출 CLR sproc 를 만듭니다 여기:

2 단계:들에게 CLR Sproc

Partial Public Class StoredProcedures
    <Microsoft.SqlServer.Server.SqlProcedure()> _
    Public Shared Sub usp_SF_ReadSFIntoTables()

    End Sub
End Class

니다.을 사용하여 연결 New SqlConnection("context connection=true").

b.설정 명령 객체(cmd)포함하는 여러한 결과 세 sproc.

c.모든 데이터를 사용하여 다음과 같다:

    Dim dataset As DataSet = New DataSet
    With New SqlDataAdapter(cmd)
        .Fill(dataset) ' get all the data.
    End With
'you can use dataset.ReadXmlSchema at this point...

d.를 통해 반복하는 각각의 테이블을 삽입하는 모든 행으로 적절한 임시 테이블(당신이 만든 단계에서 위).

최종 참고: 내 경험에 의하면,당신이 할 수 있을 적용하는 일부 간의 관계 당신의 테이블 그래서 당신이 알고 있는 배치 각 기록합니다.

는 모든이 있었습니다.

~숀,시애틀 근처

거기에는 임시방편 보는 잘 할 수 있습니다.추가 선택적 매개 변수 N int 귀하의 sproc.기본 값 N-1.경 N 값은-1,다음의 모든 하나의 선택합니다.그렇지 않으면,N 번째 선택하고 단 N 을 선택합니다.

예를 들어,

if (N = -1 or N = 0)
    select ...

if (N = -1 or N = 1)
    select ...

발신자의 sproc 자를 지정하지 않은 결과를 얻을 설정 하나 이상의 테이블이 있습니다.추출해야 하는 경우 이러한 하나 이상의 테이블에서 또 다른 sproc,단순히 귀하의 sproc 값을 지정하는 경우에는 대금당신은 전화 sproc 한 시간 각 테이블에 대한 추출하려.비효율적이 필요하면 하나 이상의 테이블에서 결과로 설정,그러나 그것은 작품에서는 순수한 TSQL.

참고 거기에 추가 문서화되지 않은 제한을 삽입하...EXEC 문의:그것이 중첩될 수 없습니다.는 저장 proc 는 EXEC 전화(또는 그것이 통화에서 차례)할 수 없습 자체가 삽입으로...EXEC.그것은 나타나는 하나의 스크래치 프로세스당 축적하는 결과,그리고 그들이 중첩된 오류를 얻을 수 있을 때 호출자가 이고,다음 수신자가 하려고 합니다.

마티유,당신을 유지할 필요가 별도의 임시 테이블에 대한 각각의"유형"의 결과입니다.또한,당신을 실행하는 동일한 하나의 여러 번,당신이해야 할 수도 있습을 추가하려면 열을하는 결과를 나타내는 전화되었습니다.

슬프게도 그것은 불가능하십니다.문제는 물론이 없다는 것을,SQL 구문을 할 수 있습니다.그것은 일어나'아래의'코스,하지만 당신은에서 얻을 수 없습니다 이는 다른 결과에 TSQL,만 응용 프로그램에서 ODBC 를 통해 또 어떤 것이다.

는 방법이 있다 라운드 그것과 같이,대부분의 것들입니다.트릭을 사용하는 것에서 ole 자동화 TSQL 을 만들 ADODB 객체를 여는 각 resultset 에서 돌고 그 결과를 테이블을 지정(또는 당신이 원하는 무엇이든 함께 결과).또한 그것을 할 수 있습니에서 DMO 을 즐길 경우 고통입니다.

하는 방법은 두 가지가 있 이렇게 쉽습니다.지팡이 하나 결과 임시 테이블에 다음을 참조 temp 테이블에서 당신의 sproc.다른 대안은 결과를 XML 변수로 사용되는 출력은 변수가 있습니다.

그러나,장단점을 모두 이 옵션이 있습니다.임시 테이블,해야 합니다에 코드를 추가하는 스크립트를 생성화를 만들려면 다음 절차를 따르면 임시하기 전에 테이블을 수정하는 절차이다.또한,당신은 정 temp 테이블의 끝에서 절차입니다.

XML 될 수 있고,메모리는 집중적이고 느립니다.

을 선택할 수 있습으로 임시 또는 테이블 테이블 작성 평가된 기능이 결과를 반환합니다.는 요청을 반복하는 방법을 통한 결과는?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top