0

我有一张桌子:

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'.

我不想合并表外的日期字段,我绝对希望功能应该在表中,我们应该处理数据并得到结果。

笔记:

如果可以更改表中的值意味着,那也很好。但是应该从表中选择值。

我希望这是可行的。提前致谢。

4

2 回答 2

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
于 2020-03-17T14:36:21.807 回答
1

将函数放在字符串之外:

CREATE TABLE A(Id INT, Val VARCHAR(100))
INSERT INTO A VALUES (1,'MyData'+format(getdate(),'yyMMdd')+'.CSV')
于 2020-03-17T13:53:29.610 回答