Как конкатенировать строку при настройке параметра в Transact-SQL - программирование

Как конкатенировать строку при настройке параметра в 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';

Я знаю, что могу объявить и отправить переменную параметру, но я хотел бы понять, почему он не выполняется при конкатенации непосредственно в параметре. благодарю вас за ваше время и знания

4b9b3361

Ответ 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';