【问题标题】:SQL Error - Only one expression can be specified in the select list when the subquery is not introduced with EXISTSSQL 错误 - 未使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式
【发布时间】:2014-03-05 15:15:12
【问题描述】:

我正在尝试创建一个脚本/SP 以从表中提取数据并以 HTML 格式发送电子邮件,其中包含电子邮件中的数据。我写了以下内容,但得到了上述错误,但不完全确定在哪里“修复”子查询。目前的查询是: 声明 @tableHTML NVARCHAR(MAX) ;

SET @tableHTML =
    N'<H1>Ad Groups and Users</H1>' +
    N'<table border="1">' +
    N'<tr><th>AD Group Name</th><th>Number of Users</th>' +
        CAST    ( 
             (SELECT        Group_Name,
                                    COUNT(*) AS 'Number of Users'
                        FROM        TABLE
                        WHERE       Group_Name IN   (
                                                    'PA_OptiTime',
                                                    'PA_P6',
                                                    'PA65_BIW',
                                                    'PA65_CAFM',
                                                    'PA65_CoinsOA',
                                                    'PA65_ConquestQ',
                                                    'PA65_Desktop_Osborne',
                                                    'PA65_MicrosoftAccess',
                                                    'PA65_MicrosoftOfficeStandard',
                                                    'PA65_MicrosoftOneNote',
                                                    'PA65_MicrosoftProject',
                                                    'PA65_MicrosoftVisio',
                                                    'PA65_MicrosoftVisioViewer',
                                                    'PA65_XStandard',
                                                    'SA65_AdobeCSSuite',
                                                    'SA65_AdobeProfessional',
                                                    'SA65_AdobeReader',
                                                    'SA65_AdobeStandard',
                                                    'SA65_AstaPowerproject',
                                                    'SA65_BentleyProjectwise',
                                                    'SA65_BravaReader',
                                                    'SA65_BravaViewer',
                                                    'SA65_CoinsPlus',
                                                    'SA65_GemSafe',
                                                    'SA65_GoogleEarth',
                                                    'SA65_NavisworksFreedomViewer',
                                                    'SA65_NRG',
                                                    'SA65_Offline',
                                                    'SA65_PDFEditor',
                                                    'SA65_PolycomCMADesktop',
                                                    'SA65_PrimaveraP6',
                                                    'SA65_SelectHR',
                                                    'SA65_ShareRegister',
                                                    'SA65_SketchUp',
                                                    'SA65_Xpress3DViewer'
                                                    )
                        GROUP BY Group_Name
                    ) 
                        AS NVARCHAR(MAX) 
                ) +
    N'</table>' ;

--create full body text
DECLARE @BodyText varchar(255)
DECLARE @SubjectText varchar(255)

SELECT @SubjectText = 'Test Email'

SELECT @BodyText = @tableHTML 

--send message
EXEC EXSP_SendSMTPMailCDO 
    @To='email@work.com', 
    @Subject = @SubjectText,
    @Body = @BodyText,
    --@HTMLFormat = 0,
    @body_format = 'HTML',
    @From = 'email@work.com',
    @Server = 'smtprelay'

Any help would be appreciated.

Thank you

【问题讨论】:

    标签: sql


    【解决方案1】:

    您正在尝试强制转换将两列返回到 NVARCHAR 的子查询。 Sql Server 不会理解如何将两列聚合到一个文本字段中,并且会抛出您收到的错误。

    CAST    ((SELECT Group_Name,
                     COUNT(*) AS 'Number of Users'
                     FROM        TABLE
                     WHERE       Group_Name IN   (
                                                    'PA_OptiTime'                                                    
                                                    )
                        GROUP BY Group_Name
                    ) AS NVARCHAR(MAX) 
    

    编辑:即使减少子查询以返回单列也行不通。问题是您似乎正在尝试为每个组附加一行 XML。因此,虽然最初的错误是通过尝试在 SQL 中强制转换多列而产生的,但修复该问题不会产生为每个组附加一行 XML 的查询。

    【讨论】:

    • 感谢您的回复。我获得的数据是每个组的用户数量,我想直接通过电子邮件发送给合适的人......尝试了几种方法,但无法让任何工作......有什么建议吗?
    • 我最终到达了那里 - 解决方案是:
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 2011-09-24
    • 2018-04-14
    相关资源
    最近更新 更多