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


답변:


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.