簡體   English   中英

如何使用 CTE 將查詢轉換為 nvarchar(max)?

[英]How to cast a query with CTE as nvarchar(max)?

通常,我們可以將單個記錄查詢轉換為nvarchar(max) 例如:

DECLARE @result NVARCHAR(MAX) = N'';

SELECT 
    @result = @result + (CAST((SELECT TOP(3) name AS td 
FROM 
    sys.databases 
FOR XML PATH ('')) AS NVARCHAR(MAX)));

SELECT @result

但是當查詢有 CTE 時,我怎么能做同樣的事情呢? 查詢仍然返回一行。 例如:

DECLARE @result NVARCHAR(MAX) = N'';

SELECT 
    @result = @result + (CAST((WITH d AS 
                               (SELECT name FROM sys.databases)
                               SELECT TOP(3) name AS td 
                               FROM d 
                               FOR XML PATH ('')) AS NVARCHAR(MAX)));

SELECT @result

當我執行它時,出現以下錯誤:

消息 156,15 級,State 1,第 7 行
關鍵字“WITH”附近的語法不正確。

消息 319,15 級,State 1,第 7 行
關鍵字“with”附近的語法不正確。 如果此語句是公用表表達式、xmlnamespaces 子句或更改跟蹤上下文子句,則前一個語句必須以分號結尾。

消息 102,15 級,State 1,第 8 行
')' 附近的語法不正確

我知道我可以使用派生表或子查詢等。但在我的例子中,查詢非常復雜,其中有幾個 CTE,我不想觸及。

您的 CTE 定義不應在 select 聲明中:

DECLARE @result NVARCHAR(MAX) = N'';    
WITH d AS (SELECT name FROM sys.databases)
SELECT @result = @result + (CAST((SELECT TOP(3) name AS td FROM d FOR XML PATH ('')) AS NVARCHAR(MAX)));
SELECT @result

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM