2017-12-02 3 views
0

나는 계산 된 값과 함께 여러 필드의 SELECT를 궁극적으로 필요로하는 가져 오기 프로세스를 만들고 있습니다. 계산 된 값의 논리는 다소 복잡합니다. SELECT 자체가 아닌 UDF에서 수행해야합니다.많은 매개 변수가있는 UDF 호출

문제는 계산 된 값이 내가 생각 한 것을 30 ~ 40 열의 내용 ...에 의해 결정된다는 점이다 :

  • 30 ~ 40 개 입력 매개 변수와 몬스터 기능.
  • SP 또는 C# app을 작성하여 선택한 데이터를 반복합니다. 이 옵션은 다른 것들과 마찬가지로 미래 보장되지 않을 가능성이 있습니다.
  • 전체 레코드의 내용을 단일 매개 변수로 JSON으로 전달하고 내 UDF의 해당 필드를 가져옵니다. here 같이 선택 항목에서 열과 JSON을 결합해야합니다.

더 나은 솔루션을위한 아이디어가 있습니까? 나는 마지막 것을 향해 기울고있다.

이 상황을 더욱 악화 시키려면 데이터가 UDF 실행을 계획중인 서버에없고 해당 서버가 이전 버전 (FOR JSON 절을 지원하지 않음)이라는 것입니다. 하지만 OpenQuery()로이 부분을 서투르게 해결할 수 있습니다.

답변

1

여러 매개 변수를 전달하는 대신 단일 값 TVP (테이블 반환 매개 변수)을 전달할 수 있습니다.

접근 1 :

CREATE TYPE MyTableType AS TABLE 
(param1 VARCHAR(50) 
, param2 INT 
, param3 DATE); 

CREATE FUNCTION dbo.my_func(@tvp_params MyTAB) 
RETURNS TABLE 
AS RETURN (
    SELECT ... 
    FROM ... 
    JOIN @tvp_params ... 
); 

접근법 2 :

CREATE TYPE myEAVTableType AS TABLE 
( param_id INT 
    ,param_name VARCHAR(128) 
    ,param_value SQL_VARIANT); 

그리고 기능의 내부

PIVOT의 일종을한다.