이전 개발자로부터 일부 코드를 가져 왔으며 여러 SQL 함수를 호출하는이 SQL 문을 발견했습니다. 보시다시피 select 문에서 함수 호출은 함수에 매개 변수를 전달합니다. SQL 문은 변수를 대체 할 값을 어떻게 알 수 있습니까? 아래 예제에서 nDeptID를 호출 할 때 nDeptID를 바꿀 내용을 쿼리 엔진이 어떻게 알 수 있습니까? Note
의 열입니다.SELECT 문에서 매개 변수화 된 함수 호출 사용. SQL 서버
SELECT 문 :
SELECT nCustomerID AS [Customer ID],
nJobID AS [Job ID],
dbo.fn_SelDeptName_DeptID(nDeptID) AS Department,
nJobTaskID AS JobTaskID,
dbo.fn_SelDeptTaskDesc_OpenTask(nJobID, nJobTaskID) AS Task,
nStandardNoteID AS StandardNoteID,
dbo.fn_SelNoteTypeDesc(nNoteID) AS [Note Type],
dbo.fn_SelGPAStandardNote(nStandardNoteID) AS [Standard Note],
nEntryDate AS [Entry Date],
nUserName as [Added By],
nType AS Type,
nNote AS Note FROM Note
WHERE nJobID = 844261
ORDER BY nJobID, Task, [Entry Date]
======================
Function fn_SelDeptName_DeptID:
ALTER FUNCTION [dbo].[fn_SelDeptName_DeptID] (@iDeptID int)
RETURNS varchar(25)
-- Used by DataCollection for Job Tracking
-- if the Deptartment isnt found return an empty string
BEGIN
-- Return the Department name for the given DeptID.
DECLARE @strDeptName varchar(25)
IF @iDeptID = 0
SET @strDeptName = ''
ELSE
BEGIN
SET @strDeptName = (SELECT dName FROM Department WHERE dDeptID = @iDeptID)
IF (@strDeptName IS NULL) SET @strDeptName = ''
END
RETURN @strDeptName
END
을 ======= ===================
미리 감사드립니다.
+1은 질문에 답할뿐만 아니라 유용한 조언을 제공합니다. – ig0774
예, 성능이 매우 좋지 않아 현재이 코드 섹션을 다시 작성하고 있습니다. –
쿼리가 37 개의 레코드를 반환하면 잠시 기다리면 쿼리의 각 함수가 37 번 호출됩니다. –