2
동적 SQL을 생성하여 함수의 값을 변수에 할당하려고합니다. 내가동적 SQL에서 함수가 반환 한 값 할당
Select @[email protected]_Dept
from dbo.WorkHistory(@today,@EID)
기능은 날짜를 반환과 같은 SQL 뭔가를 생성하기 위해 노력하고 내가 @StartDate에 할당해야합니다 (@EID_dept은 함수에 의해 반환 된 컬럼의 이름이됩니다). @EID_Dept는 @EID와 @dept를 연결하여 생성됩니다. 내가 수동으로 내 코드는 다음과 같습니다
Select @StartDate = amaan_IT
from dbo.WorkHistory('2016-10-10', amaan)
대로 나타납니다 SQL을 작성하는 경우
는 :
DECLARE @EID varchar(5), @StartDate VARCHAR(MAX),
@today DATETIME, @dept VARCHAR(10), @EID_dept varchar(20);
Select @today = SYSDATETIME()
Select @dept = dept from dbo.Dept(@EID)
Select @EID_Dept = CONCAT(@EID, @dept)
DECLARE @SQL Varchar(max);
SET @SQL = N'Select @StartDate = @EID_Dept
from dbo.PeriodHistory(@today, @EID)';
EXEC Sp_executesql
@SQL,
N'@StartDate VARCHAR(MAX) out,@EID_dept varchar(max),@today datetime,@EID Varchar',
@StartDate out,
@[email protected]_Dept,
@[email protected]
왜 동적 SQL을 사용하고 있습니까? 이 일을 더 어렵게하는 것 외에는 아무 것도하지 않습니다. –
변수를 사용하여 객체 이름을 할당 할 수 없으므로 SET @SQL = CONCAT (N'SELECT @StartDate = ', @EID_Dept,'FROM dbo.PeriodHistory (@Today, @EID); ')를 사용해야합니다. 이것은 이상적인 것으로는 보이지 않지만, 나는 이것이 최선의 방법이라고 확신하지 못합니다. – GarethD
EID가 변경 될 것이므로 함수에서 데이터를 가져 오기 위해 EID n Dept를 연결해야합니다. EID를 사용하여 Dept를 찾아서 연결해야합니다. –