简体   繁体   中英

T-SQL selecting CTE into a variable

I am attempting to set a variable to the result of a CTE select statement in SQL Server / T-SQL:

DECLARE @ReportRecipients VARCHAR(MAX);

SET @ReportRecipients = WITH CTE_TableName AS (SELECT a.emailTExt FROM 
  CSLEventAUP_Edit a JOIN CSLEventAUP_EventEditJunction b ON (a.Id = b.EditId)
  JOIN CSLEventAUP_Events c ON (b.EventId = c.Id)
  WHERE c.LogicalDeleteIn = 0
    AND c.StaffEvent = 1
    AND a.emailText IS NOT NULL
  UNION
  SELECT emailText FROM CSLEventAUP_Edit WHERE CyberGroup = 1)
  SELECT TOP 1 STUFF((
    SELECT ';' + emailTExt
    FROM CTE_TableName t1
    ORDER BY t1.emailText
    FOR XML PATH('')),1, Len(';'), '') AS EmailTexts
  FROM CTE_Tablename t0;

I get these errors:

Msg 156, Level 15, State 1, Procedure EmailSignAUPReminder, Line 38 [Batch Start Line 9]
Incorrect syntax near the keyword 'With'.

Msg 319, Level 15, State 1, Procedure EmailSignAUPReminder, Line 38 [Batch Start Line 9]
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

Running the query by itself results in

bob.xxx@mail.mil;bryan.xxx.xx@xx.mil;bryan.xx.xx@xx.edu;fred.coordinator@xx.mil

You need to define your CTE and SELECT its results in two separate steps. As this is structured, you are attempting to SELECT from an expression that does not yet exist.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM