1

에 스칼라 함수를 변환합니다.SQL 서버 내가 스칼라 함수 아래에있는 테이블 반환 함수

(12 : 2), (23 : 4, 4 : 34)

참고 ID1 반복하지만 수 ID2, ID1 + ID2는이 함수는 문자열 아래와 같이 빌드 기본 키. 예를 들어 : 실행 시간의 측면에서 데이터베이스 성능을 향상시키기 위해 테이블 ​​반환 함수로 변환하는 것이 좋습니다 경우 지금

ID1 | ID2 
1  100 
1  200 
1  110 
2  500 
3  200 
3  600 

, 궁금입니다.

이 경우 테이블 값 함수로 변환하면 성능이 향상됩니까? 실행 시간이 단축됩니까? 그렇다면 어떻게 그것을 테이블 값 함수로 변환 할 수 있습니까? 내가 변수를 선언 할 필요가 있기 때문에 그것을 변환 할 문제가있다.

+0

반환 할 테이블은 무엇입니까? 내 말은, 열이 무엇일까요? –

+0

사실 변수를 사용하지 않고 쿼리의 데이터를 연결하는 방법이 있기 때문에 문자열을 연결하기 위해 변수를 선언 할 필요가 없습니다. 예를 들어, http://stackoverflow.com/questions/13639262/optimal-way-to-concatenate-aggregate-strings –

+0

@ ZoharPeled 반환하려는 테이블은 항상 한 열의 한 행이며이 열은 nvarchar (연결 결과). – user1624552

답변

0

나는 보통 그런 구조를 사용하여 내 요구 사항은 내가 노력 달랐다으로

select 
    (select '' + '(' + CAST(ID1 AS NVARCHAR) + ' : ' + CAST(ID2 AS NVARCHAR) + ')' 
     from @IdsTbl 
     for xml path ('') 
    ) 
0
create function dbo.GetStringIds (@IdsTbl dbo.ids readonly) 
    returns table as return 
    select IdsLst = stuff(
    (select ', (' + cast(id1 as nvarchar(13)) 
      + ' : ' + cast(id2 as nvarchar(13)) + ')' 
     from @IdsTbl i 
     for xml path (''), type).value('.','nvarchar(800)') 
    ,1,2,''); 

Inline Scalar Functions - Itzik Ben-Gan

0

당신이 뭔가를 할 수는

CREATE FUNCTION [dbo].[GetStringIds] (@IdsTbl ids READONLY) 
Returns Table 
Return (
    SELECT 
     @IdsLst = COALESCE(@IdsLst + ', ', '') + '(' + CAST(ID1 AS NVARCHAR) + ' : ' + CAST(ID2 AS NVARCHAR) + ')' 
    FROM 
     @IdsTbl 
) 

이 작동 할 수 그걸 편집하려면. 최고의 희망.