Я пытаюсь создать динамический SQL для назначения переменных со значениями из функции. Я пытаюсь создать что-то вроде SQLНазначение значений, возвращаемых функцией в Dynamic SQL
Select @[email protected]_Dept
from dbo.WorkHistory(@today,@EID)
Функция возвращает дату (@EID_dept будет имя столбца, возвращаемого функцией), который мне нужно назначить @StartDate. И @EID_Dept генерируется путем конкатенации @EID и @dept.
Если я вручную писать SQL это будет выглядеть как
Select @StartDate = amaan_IT
from dbo.WorkHistory('2016-10-10', amaan)
Мой код ниже:
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 будет передан, используя EID, мне нужно найти Dept, а затем объединить оба. –