Как конкатенировать строку при настройке параметра в Transact-SQL
Первый вопрос здесь и следующий. Я написал следующий код, и все работает нормально:
DECLARE @subject NVARCHAR(100)
SET @subject = 'Report executed on ' + CONVERT(VARCHAR(12), GETDATE(), 107)
SELECT @subject
Результат: отчет выполнен 17 августа 2012 г.
но при попытке конкатенации предыдущей строки при установке параметра процедуры msdb.dbo.sp_send_dbmail она терпит неудачу
EXEC msdb.dbo.sp_send_dbmail @profile_name='XXX',
@recipients='[email protected]',
@subject = 'Report executed on ' + CONVERT(VARCHAR(12), GETDATE(), 107),
@body= @tableHTML,
@body_format = 'HTML';
Я знаю, что могу объявить и отправить переменную параметру, но я хотел бы понять, почему он не выполняется при конкатенации непосредственно в параметре. благодарю вас за ваше время и знания
Ответы
Ответ 1
Значения параметров для хранимых процедур T-SQL не могут быть выражениями. Они должны быть либо константой, либо переменной.
Из MSDN - укажите параметры:
Значения параметров, предоставляемые вызовом процедуры, должны быть константами или переменная; имя функции не может использоваться как значение параметра. Переменные могут быть определяемыми пользователем или системными переменными, такими как @@spid.
Ответ 2
Вам нужно сделать:
DECLARE @Sub nvarchar(100);
SET @Sub = 'Report executed on ' + CONVERT(VARCHAR(12), GETDATE(), 107);
EXEC msdb.dbo.sp_send_dbmail @profile_name='XXX',
@recipients='[email protected]',
@subject = @Sub,
@body= @tableHTML,
@body_format = 'HTML';