테이블 값 함수에서 변수 선언


답변:


205

테이블 값 함수에는 두 가지 종류가 있습니다. 하나는 단지 select 문이고 하나는 select 문보다 더 많은 행을 가질 수 있습니다.

이것은 변수를 가질 수 없습니다.

create function Func() returns table
as
return
select 10 as ColName

대신 다음과 같이해야합니다.

create function Func()
returns @T table(ColName int)
as
begin
  declare @Var int
  set @Var = 10
  insert into @T(ColName) values (@Var)
  return
end

33
첫 번째 예는 다중 문 테이블 반환 함수에 비해 성능 이점이있는 "인라인 테이블 반환 함수"로 알려져 있습니다. 즉, 데이터베이스 서버는 ITVF 가 상위 쿼리에 인라인 된 쿼리를 재구성 하여 본질적으로 매개 변수가됩니다. 반면 MSTVF는 불투명 한 저장 프로 시저처럼 작동합니다 (sprocs에 비해 자체 장점이 있음). 인라인 함수는 MSTVF보다 선호되어야합니다. 중간 값 (예 : 복잡한 스칼라 함수 표현식의 결과)을 계산하고 저장해야하는 경우 하위 쿼리를 사용하십시오. VIEW
— 다이

1
설정하려는 변수를 채우기 위해 사용하는 결과가 어떤 식 으로든 일반화 가능하다면 별도의 함수를 작성하여 생성하는 것을 고려할 수 있다는 점도 언급 할 가치가 있습니다. 이렇게하면 동적으로 생성 된 값을 함수에 삽입하면서 위의 @Dai에서 설명한 ITVF를 모든 이점과 함께 사용할 수 있습니다. 위의 솔루션 (@MikaelEriksson에게 감사드립니다!)의 도움으로 함수를 작성했습니다.이 함수는 매개 변수 중 하나를 도우미 함수에 전달하여 MSTVF 양식을 사용해야하는 것을 저장합니다.
— naughtilus

1
가장 큰 비용은 제 기능을 위해 삽입되고 나는 테이블 변수 선택의 반환 결과에 삽입하지 않고이 비용을 생략하는 방법을 모른다
— uzay95

@naughtilus 이것의 예를 보는 것이 좋을 것입니다. 제안과 함께 다른 답변을 제공하는 것을 고려해 보셨습니까?
— Jacques 19
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.