Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL查询中将多行选择为一个变量_Sql_Sql Server 2008 - Fatal编程技术网

在SQL查询中将多行选择为一个变量

在SQL查询中将多行选择为一个变量,sql,sql-server-2008,Sql,Sql Server 2008,此查询提供错误: 子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时 如何重写此查询以使其工作,从而将所有值都包含在一个变量中?最终结果需要是一个如下所示的“视图”: .ObjectID int .Content(包含Forumthread.threadText和forumReply.ReplyText中存在的所有文本的字符串) .域字符串 .SiteID int您需要的是一个字符串concat聚合函数,sql server Unfortunualey不包括该函数 您可以使用.N

此查询提供错误: 子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时

如何重写此查询以使其工作,从而将所有值都包含在一个变量中?最终结果需要是一个如下所示的“视图”:

.ObjectID int

.Content(包含Forumthread.threadText和forumReply.ReplyText中存在的所有文本的字符串)

.域字符串


.SiteID int

您需要的是一个字符串concat聚合函数,sql server Unfortunualey不包括该函数


您可以使用.Net CLr函数创建自己的。请参见和

根据Martin的评论:

SELECT ft.ThreadTitle AS Title, 
fr.ReplyText + ' ' + ua2.Username + ' ' + ft.ThreadText + ' '  +

-- THIS NEXT LINE IS WHAT I WANT TO ACHIEVE:

(Select ReplyText from ForumReply Where ThreadID=ft.ThreadID) 

-- THE ABOVE LINE HAVE MULTIPLE ROWS/VALUES THAT I WANT TO JOIN INTO ONE VARIABLE. HOW?
AS [Content], 

ss.Domain, 
ss.SiteID, 
ft.ThreadID AS ObjectId
FROM         dbo.ForumReply AS fr INNER JOIN
                      dbo.ForumThreads AS ft ON fr.ThreadID = ft.ThreadID INNER JOIN
                      dbo.User_Account AS ua1 ON ft.CreateByUserID = ua1.UserID INNER JOIN
                      dbo.User_Account AS ua2 ON fr.ReplyUserID = ua2.UserID INNER JOIN
                      dbo.SysT_Site AS ss ON ua1.SiteID = ss.SiteID

您可以这样分配给局部变量

DECLARE @t TABLE  (id int, ReplyText varchar(100))
INSERT INTO @t (id, ReplyText) VALUES (1, 'So Long,')
INSERT INTO @t (id, ReplyText) VALUES  (2, 'And Thanks for')
INSERT INTO @t (id, ReplyText) VALUES  (3, 'All the Fish!')

SELECT (SELECT replytext + ' '  FROM @t FOR XML PATH('')) AS CONTENT
我用过一些东西:

SELECT @TempVariable = (SELECT replytext + ' ' FROM @t FOR XML PATH(''))
结果:

SELECT
MyTable.Number AS Number,
(SELECT stuff(
    (
    select ', ' + x from (SELECT MyOtherTable.Name AS x FROM MyOtherTable WHERE MyOtherTable.ID = MyTable.ID) tb 
    FOR XML PATH('')
    )
, 1, 2, ''))AS AllNames

FROM
MyTable

这正是我不想要的。我需要所有记录集并将它们连接成一个值您可以在SQL Server中使用
XML路径将多行中的值连接成一个字符串这对我有用me@t是DECLARE@t表(id int,ReplyText varchar(100))
Number:   AllNames:
  1       Andrew, Carl
  2       Bobby, Dave