2010-12-10 58 views
2

我使用子查询来获取需要的结果(返回多个记录),并且我想将这些结果放入返回的单个记录中。T-SQL,在子查询中选择@variable导致语法错误

当我自己运行子查询时,它可以工作,但是一旦我将它用作子查询,由于语法错误,它不再起作用。

以下代码导致语法错误

(附近有语法错误 '=')

declare @test varchar(1000) 
set @test = '' 

SELECT description, (SELECT @test = @test + FirstName 
       FROM EMP_tblEmployee 
       )select @test 
FROM EMP_tblCrew 

所以基本上,子查询

(SELECT @test = @test + FirstName 
        FROM EMP_tblEmployee 
        )select @test 

返回“ charliejohnjacob“

主查询

SELECT description FROM EMP_tblCrew 

返回 “看门人”

所以我想它说

看门| charliejohnjacob

2字段,1条记录。

+2

你想用纯英语做什么? – 2010-12-10 16:36:45

+0

你想将行转换为列,或者向firstName的空格添加空格 – StingyJack 2010-12-10 16:40:45

+0

看起来像试图将所有名字连接到结果集中......但是为什么?如果它能起作用,它将创建各种各样的名字金字塔。这里的意图是非常有问题的。 – 2010-12-10 16:43:25

回答

1

您的查询在语法上不正确,而且T-SQL解析器有一个令人讨厌的习惯,即在某些时候不会非常准确地报告错误。这是一个有点刺的黑暗,但尝试:

SELECT 
description, 
(SELECT FirstName + ' ' FROM EMP_tblEmployee FOR XML PATH('')) AS [Name Concat Result] 
FROM EMP_tblCrew 

这将解决至少有一两件事,虽然我不知道SQL服务器是如何看待串联内嵌这样。如果您的表格具有可观的大小,那么您还有可能会溢出varchar(1000)。即使varchar 8000也不是很适合这种查询。

+0

嗨,我刚刚尝试过,没有工作,同样的错误。 声明@test VARCHAR(1000) 组@test = '' \t SELECT的说明中,(SELECT @test = @test +姓 \t \t \t \t FROM EMP_tblEmployee \t \t \t \t)作为测试 从EMP_tblCrew – Kukoy 2010-12-10 16:43:22

+0

如果你真的想连接你可能想到的使用游标或CTE函数的名字。请解释你想达到什么。更好的是,嘲笑你想要的结果集。 – 2010-12-10 16:44:29

+0

您在评论的查询中缺少FROM子句。 – 2010-12-10 16:45:24

1

尝试在谷歌搜索“SQL Concatenate rows into string”。有很多有用的解决方案。

看起来你还需要将员工加入到乘员表中,这样你就不会得到一些笛卡尔乘积(通常不是想要的)。

+0

这很尴尬,我找到了几个类似于我的问题使用您的搜索条件...感谢您的输入。 http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-text-string http://stackoverflow.com/questions/6899/is-there-a-way-to -create-A-MSSQL-功能到加入-多行-从-A-子查询 – Kukoy 2010-12-10 16:59:33