【发布时间】:2011-02-08 18:46:53
【问题描述】:
我对 Visual Studio 2010 SQL 感到非常沮丧:
我在 StackOverflow 上找到了有关如何使用 FOR XML PATH('') 将多行中的字符串连接到单行的代码。
当我在查询和视图设计器中编写以下行时(因为大概没有其他方法可以在 Visual Studio 中编写 SQL 然后将其保存为“视图”),我得到的结果不是我想要的:
代码:
Names AS
(SELECT DISTINCT
Z.code,
(SELECT DISTINCT CAST(B.fname + ' ' + B.lname + ' ' AS VARCHAR(MAX))
FROM Records AS A LEFT OUTER JOIN Employees AS B ON A.id = B.id
WHERE (A.code = Z.code) FOR XML PATH('')) AS EmployeeNames
FROM Employees AS Z)
我得到如下结果:
Code EmployeeNames
---- -------------------------
1234 <Expr1>First Last</Expr1>
为什么?因为 Visual Studio 2010 在它的所有荣耀中添加了“as Expr1”到以下内容:
(SELECT DISTINCT CAST(B.fname + ' ' + B.lname + ' ' AS VARCHAR(MAX))
FROM Records AS A LEFT OUTER JOIN Employees AS B ON A.id = B.id
WHERE (A.code = Z.code) FOR XML PATH('')) *as Expr1*
有什么解决方法吗?我注意到问题来自查询和视图设计器解析器......我可以通过在我的代码中的某处放置解析器不支持的随机函数(如 OVER())来故意破坏解析器。这解决了问题,并删除了 XML 标记,但似乎没有必要。
还有其他人有这个问题吗?有人知道解决方法吗?
非常感谢您花时间和精力解决我的问题。
【问题讨论】: