Получать значения динамически из таблиц при отправке писем с SQL Server

У меня есть таблица:

CREATE TABLE A(Id INT, Val VARCHAR(100))
INSERT INTO A VALUES (1,'MyData+format(getdate(),''yyMMdd'')+.CSV')

DECLARE @out VARCHAR(100)
SELECT @out = Val FROM A WHERE Id = 1

EXEC sp_send_dbmail @profile_name='MyProfile',
     @recipients='test@gmail.com',
     @subject=@out,
     @body='This is the body of the test message.'

Когда я выполняю запрос, я получил письмо с темой вроде 'MyData+format(getdate(),'yyMMdd')+.CSV', но мне нужен результат вроде 'MyData20200317.CSV'.

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

Заметка:

Если можно изменить значение в таблице, значит, это тоже нормально. Но значения следует выбирать из таблицы.

Надеюсь, это выполнимо. Заранее спасибо.

2 ответа

Решение

Вы можете сделать это, немного изменив структуру таблицы.

попробуйте следующее:

CREATE TABLE #A(Id INT, Val_START VARCHAR(100), Val VARCHAR(100), Val_END VARCHAR(100))
INSERT INTO #A VALUES (1,'MyData','format(getdate(),''yyMMdd'')', '.CSV')

DECLARE @SQL NVARCHAR(MAX)
DECLARE @OUT VARCHAR(100)
SET @SQL = N'SET @OUT = ' + (SELECT ''''+Val_START+'''+' + VAL + '+'''+Val_END+''''FROM #A WHERE Id = 1)

exec sp_executesql @sql, N'@OUT VARCHAR(100) output', @OUT out
SELECT @OUT

Поместите функцию за пределы строки:

CREATE TABLE A(Id INT, Val VARCHAR(100))
INSERT INTO A VALUES (1,'MyData'+format(getdate(),'yyMMdd')+'.CSV')
Другие вопросы по тегам