【问题标题】:Get values dynamically from tables while sending mails from SQL Server从 SQL Server 发送邮件时从表中动态获取值
【发布时间】:2020-06-28 14:36:48
【问题描述】:

我有一张桌子:

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' 这样的输出。

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

注意:

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

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

【问题讨论】:

    标签: sql-server dynamic sqlmail


    【解决方案1】:

    您可以通过稍微改变表结构来做到这一点。

    尝试以下方法:

    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
    

    【讨论】:

    • 感谢您的建议。我已经对表格设计进行了更改。
    【解决方案2】:

    把函数放在字符串之外:

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

    【讨论】:

    • 感谢您的回答彼得。但是当你像这样插入时,你总是只会得到插入的时间。但我想要的是执行时间,而不是插入时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多