SQL Server 2008 Management Studio连接行

SQL Server 2008 Management Studio连接行,sql,sql-server-2008,Sql,Sql Server 2008,我已经为此工作了大约两天,我一辈子都不明白我做错了什么。基本上,我正在尝试创建一个临时表,我已经为它合并了列。现在我正在尝试合并这些行,经过整整20个小时的搜索,我找不到解决方案。我希望有人能向我解释我做错了什么 我正在使用Microsoft SQL Server 2008管理工作室 DECLARE @ThisUID int; DECLARE @ThisUIDName varchar; SELECT TOP 1 @ThisUIDName = ElementName FROM ElementN

我已经为此工作了大约两天,我一辈子都不明白我做错了什么。基本上,我正在尝试创建一个临时表,我已经为它合并了列。现在我正在尝试合并这些行,经过整整20个小时的搜索,我找不到解决方案。我希望有人能向我解释我做错了什么

我正在使用Microsoft SQL Server 2008管理工作室

DECLARE @ThisUID int;
DECLARE @ThisUIDName varchar;

SELECT TOP 1 @ThisUIDName = ElementName 
FROM ElementNames 
WHERE ElementUID = @ThisUID

;WITH CTE AS (
    SELECT v.ElementUID, 
    '^'+a.ElementAttribute + '|' + Value1 + Value2 as Combined 
    FROM ElementAttributeValues v 
    Left JOIN ElementAttributes a 
    ON v.ElementAttribute = a.UID 
)
SELECT * 
INTO #TempTable 
FROM CTE 

SELECT 
    a.ElementUID, a.Combined
    STUFF((SELECT CAST( '' as varchar(max)) + e.Combined
           FROM #TempTable
           WHERE e.ElementUID = a.ElementUID
           FOR xml path(''), type). as a.Combined
FROM #TempTable a
ORDER BY a.ElementUID DESC

如果有人能解释我到底做错了什么,我将不胜感激。

首先,我没有看到逗号,在你最后的SELECT语句的第一行后面,在a.组合之后,第二,我认为把STUFF语句的值也称为相同-。。作为a.组合-尝试使用不同的名称

因此,请尝试将此作为您的最终SELECT语句:

SELECT 
    a.ElementUID, a.Combined,   -- add a comma at the end of this line
    STUFF((SELECT CAST('' AS VARCHAR(MAX)) + e.Combined
           FROM #TempTable
           WHERE e.ElementUID = a.ElementUID
           FOR XML PATH(''), TYPE) AS Stuffed     -- use a distinct name here!
FROM #TempTable a
ORDER BY a.ElementUID DESC

我认为您没有将确切数量的参数传递给stuff函数。stuff接受4个参数。 填充字符\表达式、开始、长度、替换为\表达式


即使马克提到逗号被遗漏,额外的。类型后面还有

:我猜您指的是SQL Server Management Studio,通常称为SSMS,而不是您在标题中所说的MSDN。我冒昧地为你改变了这一点这是怎么回事?您缺少STUFF的最后3个参数和一个右参数。这里少了一些东西。