2009-04-10 2 views
34

MS SQL 2005에서 임시 저장 프로 시저 또는 함수를 만들 수 있습니까? 이 쿼리는 저장 프로 시저를 사용하기 때문에 실행 후 사라질 것입니다.T-SQL의 임시 함수 또는 저장 프로 시저

일부 데이터에 대해 EXEC를 사용하고 싶습니다. 그러나 모든 테이블에 대해이 명령을 처리 할 것이므로 일부 명령을 변경해야합니다. 그래서 나는 (테이블 이름 등과 같이) 내가 제공 한 인수로부터 쿼리를 반환하고 EXEC로이 쿼리를 실행하는 임시 SP를 만들 것이라고 생각했습니다.

그리고이 저장 프로 시저는 나에게 유용하지 않으므로 나중에 임시 쿼리를 실행하여 쿼리가 끝나면 사라질 것입니다.

+1

수정 된 답변 사용자의 의견 –

답변

27

편집하십시오. TSQL이 포함 된 (매개 변수화 된) nvarchar에 대해 sp_ExecuteSQL을 사용해야하는 것처럼 들립니다.

sp_ExecuteSQL에서 검색; 간단한 예 :

DECLARE @SQL nvarchar(4000), 
@Table varchar(20) = 'ORDERS', 
@IDColumn varchar(20) = 'OrderID', 
@ID int = 10248 

SET @SQL = 'SELECT * FROM [' + @Table + '] WHERE [' 
    + @IDColumn + '] = @Key' 

    EXEC sp_executesql @SQL, N'@Key int', @ID 

참고하는 테이블 및 컬럼 이름 조회로 결합해야하지만, 값은 (예컨대 @Key 같은) 매개 변수화 될 수있다.


임시 저장 프로 시저가 있지만 sp가 아닌 연결 당 있습니다.

그러나 공통 테이블 표현식을 보길 원할 것입니다.이 표현식은 내가 읽은 것일 수도 있지만 (단 한 번만 읽을 수는 있지만).

어쩌면 무엇을하려고하는지 명확히 할 수 있다면 으로 처리 하시겠습니까?

+0

"임시 저장 프로 시저"비트를 명확히 할 수 있습니까? sp_prepare 또는 sp_executesql을 의미합니까? – gbn

+1

나는 성취하려고 노력하는 것에 대해 좀 더 탐구했다. 그것이 내 아이디어를 이해하는 데 도움이되기를 바랍니다. –

+1

CTE를 언급하는 +1! SQL Server 2005에서 크게 사용되지 않는 기능 ... –

-3

쿼리 내에서 저장된 proc의 SQL을 사용하십시오. DB 내부에서 스토어드 프로 시저를 작성할 필요가 없으므로 쿼리 내에서 일반 쿼리보다 이점을 얻을 수 없습니다.

+14

하지만이 방법을 사용하면 저장된 proc 코드를 다시 사용할 수 없습니다. – Tone

26

이 질문은 약간 오래된 것이지만 다른 대답은 임시 절차를 만드는 구문을 제공하지 못했습니다. 구문은 임시 테이블과 동일하지만 로컬 임시 개체의 경우 #name, 전역 임시 개체의 경우 ##name입니다.

CREATE PROCEDURE #uspMyTempProcedure AS 
BEGIN 
    print 'This is a temporary procedure' 
END 

이 내용은 공식 문서의 "절차 이름"섹션에 설명되어 있습니다. http://technet.microsoft.com/en-us/library/ms187926%28v=sql.90%29.aspx

이 기술을 사용하여 원시 T-SQL 단원 테스트의 코드를 중복 제거합니다. 실제 단위 테스트 프레임 워크는 더 좋을 것이지만 이것은 아무것도 아닌 것보다 낫고 "스스로 가비지 수집"합니다.

+2

기능은 어떻습니까? SELECT COLUMN 표현식에서 이들을 사용할 수 있으려면? – jgomo3