2013-07-29 2 views
0

임시 테이블을 만드는 저장 프로 시저를 만들었습니다. 이제 .NET을 사용하여 쿼리 할 수 ​​있어야합니다. 따라서 다음과 같은 것이 필요할 것입니다 :저장 프로 시저에서 생성 된 임시 테이블을 동적으로 쿼리하십시오.

SELECT * FROM storedProcedure() WHERE ... 

저장 프로 시저에서 생성 된 테이블도 동적이므로 스키마가 변경됩니다. SQL Server 2005 사용.

반환해야 할 것은 동적 테이블이므로 함수를 사용할 수 없습니다. 테이블을 미리 정의하면 함수가 쓸모 없게됩니다.

동적 SQL을 사용하여 전역 임시 테이블을 만들었습니다. 동적 전역 임시 테이블을 만들고 .NET을 통해 액세스 할 수있었습니다.

insert into @t(<columns here>) 
    exec stored_procedure; 

그러나, 많은 경우에, 당신은 사용자 정의 함수와 같은 저장 프로 시저를 대체 할 수있다 : 참조 알 수 있듯이

+1

이 게시물을 볼 사용자 정의 함수에 저장 프로 시저 변경에 대한 생각, 생산에이 일을 추천 할 수 없습니다이

select * from openrowset('SQLNCLI', 'Server=<your server here>;Database=<your database here>;Trusted_Connection=yes;','set fmtonly off exec <your procedure here>') 

같은 저장 프로 시저를 선택할 수 있습니다 : [http://stackoverflow.com/questions/1492411/sql-server-select-from-stored-procedure][1] [1] : http://stackoverflow.com/questions/1492411/sql-server-select-from-stored-procedure – BWS

+1

SQL Server가 RDBMS라고 가정합니까? 글로벌 임시 테이블은 어떻습니까? – Bridge

+0

@Bridge 전 세계 임시 테이블에 대해 생각하고 있었지만 여러 트랜잭션이 동시에 진행되는 경우 덮어 쓰지 않을까요? – user1938919

답변

1

, 당신은 같은 것을 사용합니다. 이러한 값을 반환하도록 정의하고, 당신이 그것을 사용하고자하는대로 정확하게 사용할 수 있습니다

있습니다
select * 
from dbo.udf_MyFunction(); 

, 각 방법에 대한 과정, 장점과 단점. 저장 프로 시저 메서드의 단점은 이러한 저장 프로 시저를 중첩 할 수 없다는 점입니다. 함수 접근법의 단점은 동적 SQL을 사용할 수 없다는 것입니다.

+0

함수를 사용하면 동적 테이블을 반환 할 수 있습니다. 함수에서 보았 듯이 생성 된 테이블과 스키마를 선언해야하기 때문입니다. – user1938919

+0

@ user1938919 . . 인라인 테이블 값 함수를 사용하면 return 절이 형식을 지정합니다. 다중 행 테이블 값 함수의 경우 유형을 정의의 일부로 선언해야합니다. 그러나 저장 프로 시저 결과를 테이블에 캡처하려면 삽입을 수행하기 전에 * 테이블을 정의해야하므로 테이블 정의가 필요합니다. –

+0

작동하지 않으면 JSON에서 동적 테이블을 만들고 다른 테이블과 결합한 다음 쿼리하여 반환 할 수 있어야합니다. 그래도 고마워. – user1938919

0

사실, 당신은 내가하지만,

관련 문제