Sql server SQL Server:编辑查询结果在SQL Server发送的电子邮件中的显示方式

Sql server SQL Server:编辑查询结果在SQL Server发送的电子邮件中的显示方式,sql-server,Sql Server,我已经设置了一个存储过程,如果满足条件,它将发送一封电子邮件,当发送电子邮件时,它看起来是这样的 Name Assignment Start_Date End_Date -------------------------------------------------------------------------------------------------- --- -----

我已经设置了一个存储过程,如果满足条件,它将发送一封电子邮件,当发送电子邮件时,它看起来是这样的

Name            Assignment
                                         Start_Date      End_Date
--------------------------------------------------------------------------------------------------
---
---------------------------------------------------------------
Doe, John        Light Duty
                                            2019-01-05      2019-10-05
(1 row affected)

我希望标题显示在同一行中,减少虚线,结果显示在同一行中。如何修改查询结果显示?

您可以尝试以下操作:

IF OBJECT_ID('tempdb..#Data') IS NOT NULL DROP TABLE #Data

-- Create your dataset, assuming Name, Assignment, StartDate and EndDate as columns
SELECT
    *
INTO #Data
FROM YourTable

-- Variables to iterate into
DECLARE @Name VARCHAR(MAX)
DECLARE @Assignment VARCHAR(MAX)
DECLARE @StartDate DATE
DECLARE @EndDate DATE

-- If dataset is empty, do nothing
IF (SELECT COUNT(*) FROM #Data) > 0 BEGIN

    -- Create headers and css
    SET @HtmlContent = '
        <style>
            html { font-family:Arial }
            th, td { padding:5px; }
            table { border-collapse:collapse }
            th { background-color: blue; border:1px solid white }
            td { border: 1px solid #ccc }
        </style>
        <table>
            <tr>
                <th>Name</th>
                <th>Assignment</th>
                <th>Start Date</th>
                <th>End Date</th>
            </tr>'

    -- Create and open cursor
    DECLARE DataCursor CURSOR FOR SELECT * FROM #Data
    OPEN DataCursor

    -- fetch first results
    FETCH NEXT FROM DataCursor INTO @Name, @Assignment, @StartDate, @EndDate

    -- Loop while results are still being fetched
    WHILE @@FETCH_STATUS = 0 BEGIN

        -- Create the next html row
        SET @HtmlContent = @HtmlContent + '
            <tr>
                <td>' + @Name + '</td>
                <td>' + @Assignment + '</td>
                <td style=''text-align:center''>' + FORMAT(@StartDate, 'dd/MM/yyyy') + '</td>
                <td style=''text-align:center''>' + FORMAT(@EndDate, 'dd/MM/yyyy') + '</td>
            </tr>'

        -- Fetch the next results and restart loop
        FETCH NEXT FROM DataCursor INTO @Name, @Assignment, @StartDate, @EndDate
    END

    -- Close and cleanup the cursor
    CLOSE DataCursor
    DEALLOCATE DataCursor

    -- Close the table, we opened it in the headers
    SET @HtmlContent = @HtmlContent + '</table>'

    -- Send the stuff
    EXEC msdb..sp_send_dbmail @profile_name='Your mail profile',
        @recipients='Something@somewhere.com',
        @copy_recipients='Something@somewhere.com',
        @subject='My subject',
        @body=@HtmlContent,
        @body_format = 'HTML'
END
比特大猩猩,你可能应该使用nvarchars而不是varchars,这可能是不可能的。但这可能会让你开始。如果将SELECT*从表中转换为数据,则真正需要做的就是从实际表中转换


编辑:哦,你也需要更改底部电子邮件中的详细信息

你可以用查询结果构建一个html正文字符串,并在sp_send_dbmail中指定@body_format=N'html'