簡體   English   中英

使用XML路徑的Visual Studio 2010和Query Designer SQL問題

[英]Visual Studio 2010 and Query Designer SQL Problem with XML Path

我對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標記,但是似乎沒有必要。

還有其他人有這個問題嗎? 有誰知道解決方法?

非常感謝您花費時間和精力解決我的問題。

我遇到了類似的問題,而對我來說,解決方法是在每種情況下定義Cast。

例:

從記錄中向左命名AS(SELECT DISTINCT Z.code,(SELECT DISTINCT CAST(B.fname AS varchar(10) +''+ CAST (B.lname AS varchar(10) +'')) ON A.id = B.id WHERE(A.code = Z.code)FOR XML PATH(''))AS EmployeeNames FROM Employees AS Z)

暫無
暫無

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

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