0
아래의 where 문에서 동적 변수를 사용하는 뷰를 만들었습니다.뷰에서 SQL 선언 변수
DECLARE
@wkFileYear SMALLINT = (select fs.FileYear from dbo.FileSemesters fs
where fs.systemcurrentflag = 1),
@wkFileSemester SMALLINT = (select fs.FileSemester from dbo.FileSemesters fs where fs.systemcurrentflag = 1)
Select R.FileType, R.FileYear, R.FileSemester, R.ID, R.ClassCode, R1.Raw
from
(
SELECT SC.FileType, SC.FileYear, SC.FileSemester, SC.ID, SC.ClassCode
FROM StudentClasses AS SC
) as R
LEFT JOIN
(
SELECT SAR.Filetype,SAR.FileYear, SAR.FileSemester, SAR.ID, SAR.ClassCode, SAR.Result as Raw
FROM
StudentAssessmentResults AS SAR
) as R1
on r.FileYear = R1.Fileyear
and R.FileSemester = R1.FileSemester
and R.FileType = R1.FileType
and R.ClassCode = R1. ClassCode
and R.ID = R1.ID
where
R.FileType = 'A'
AND (R.FileYear = @wkFileYear)
AND (R.FileSemester =
case
when (left(R.classcode,2) = '12' or left(R.classcode,2) = '11') and @wkFileSemester = 4
then 3
else @wkFileSemester
end
)
데이터베이스의보기로 저장하고 싶지만보기 내에서 변수를 선언 할 수 없습니다. CTE 또는 테이블 값 함수 사용에 대한 모든 정보를 살펴 보았지만 모든 구문에 대해서는 잘 모르겠습니다. 다양한 소스에서 예제를 사용하여 CTE 및 테이블 가치있는 함수를 만들려고 시도했지만 행운은 없습니다.
누군가가 내가 변수를 사용할 수있는 방법을 설명 할 수 있었지만 데이터베이스의보기로 저장할 수있게되기를 바랬습니다.
뷰 내 FileSemesters 테이블에 조인을했는데 어떤 이유로이 속도가 훨씬 느린 것으로 나타났습니다. Year와 Semester를 where 문으로 하드 코딩 할 때 훨씬 빨랐습니다. 그래서 FileSemesters 테이블에 조인하지 않고 변수로 전달하려고했습니다. –
저장 프로 시저 예제로 내 대답을 업데이트했습니다. – Chris