Получать значения динамически из таблиц при отправке писем с 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')