2010-11-18 8 views
7

SQL 함수가 있으므로이 함수에서 몇 가지 변수를 선언해야합니다. 제발 어떻게 이것을 얻을 수 있는지 조언 해주세요. >sql 함수에서 변수 선언

Declare @ClientResult TABLE(
     RowIndex int identity(1,1), 
     SplitText varchar(50) 
    ) 

를 아래의 함수 -

예를 들어 난 넣어야.

create FUNCTION [dbo].CLIENT_SHIPPINGREPORTDATA_Function_Test 
(     
@CLIENTPK_NEW TABLE, 
@CGNEEPK TABLE 
@type varchar(100)    
)     
RETURNS TABLE      
AS    

RETURN     

SELECT distinct    
OP_PartNum,    
OP_PK  
FROM Client_whsPallet pallet     

내가 SQL 서버에게 다중 문 테이블 함수를 2005

감사

답변

6

을 당신이 후에있는 것은 사용하고

예를 들어,

CREATE FUNCTION dbo.fxnExample (@Param INTEGER) 
RETURNS @Results TABLE(FieldA VARCHAR(50)) 
AS 
BEGIN 
INSERT @Results 
SELECT SomeField 
FROM Somewhere 
WHERE ParamField = @Param 

RETURN 
END 

이는 "인라인 테이블 반환 함수"라고하고 다중 문 접근 방식으로 전환 할 경우이 성능 문제가 발생할 수 있기 때문에 당신이 차이를 알고 있어야 현재 함수 다르다. 내 조언은 가능한 한 인라인 테이블 값 함수를 사용하려고 시도하는 것입니다. 나는 당신이 세부 사항으로 이동이 기사를 체크 아웃하는 것이 좋습니다 : SQL 서버에서

Multi-statement Table Valued Function vs Inline Table Valued Function
http://blogs.msdn.com/b/psssql/archive/2010/10/28/query-performance-and-multi-statement-table-valued-functions.aspx
http://sqlbits.com/Agenda/event6/High_performance_functions/default.aspx

+0

반환 된 테이블의 값이 실제로 동적 열을 기반으로하는 피벗 테이블 인 경우 어떻게해야합니까? 그게 사실 테이블 함수를 사용하는 이유는 ... 사실 : / –

5

당신은 인라인 테이블 반환 함수의 내부 변수를 선언 할 수 없습니다. 실제로 변수를 선언해야하는 경우 다중 명령문 테이블 값 함수를 작성해야합니다. 당신이 뭔가를 할 것이다 :

CREATE FUNCTION [dbo].CLIENT_SHIPPINGREPORTDATA_Function_Test 
(
    @CLIENTPK_NEW TABLE, @CGNEEPK TABLE @type varchar(100) 
) 
RETURNS @output TABLE (OP_PartNum int, OP_PK int) 
AS BEGIN 

Declare @ClientResult TABLE(RowIndex int identity(1,1), SplitText varchar(50)) 

/* more code here */ 

RETURN 
END 

정확히 당신이 멀리 성능의 감소를 보 겠지만 그래도 다중 문 기능을 사용하여 주변에있는 경우, 내가 볼 것이다 일을하려고하는 무엇인지 알 수 없습니다.

0

AdaTheDev에서 제안한 것처럼 함수에서 테이블을 반환하는 다중 명령문 함수를 만들 수 있습니다.
그렇지 않으면 당신은 당신이

create table #TableNAme (FieldA Varchar(5)) 
3

이 동일 코드 샘플을 비교 #로 이름을 앞에 붙여 새로운 임시 테이블을 만들 수있는 함수 내에서 테이블을 작성해야합니다. 인라인 및 다중 문 테이블 반환 함수의 구문 차이점을 보여줍니다.

CREATE FUNCTION [dbo].Inline (@type varchar(100)) 
RETURNS TABLE 
AS 
RETURN 
    SELECT distinct name 
    FROM sysobjects 
    WHERE type = @type 
GO 

CREATE FUNCTION [dbo].Multistatement (@type varchar(100)) 
RETURNS @results TABLE (name sysname) 
AS 
BEGIN 
    INSERT @results (name) 
    SELECT distinct name 
    FROM sysobjects 
    WHERE type = @type 

    RETURN 
END