标签: for-xml-path

使用"FOR XML PATH"时如何避免字符编码?

我正在寻找从SQL Server 2005表创建一个以逗号分隔的值列表,就像在JanetOhara的问题中一样.我正在使用类似于techdo对问题的回答中提出的查询.

一切正常,除了值列表正在进行XML编码.应该是什么:

Sports & Recreation,x >= y
Run Code Online (Sandbox Code Playgroud)

而是返回为:

Sports & Recreation,x <= y
Run Code Online (Sandbox Code Playgroud)

有没有办法在SQL Server中使用"FOR XML"时禁用XML字符编码?

xml encoding sql-server-2005 for-xml-path

45
推荐指数
1
解决办法
4万
查看次数

SQL Server:FOR XML PATH - 嵌套/分组

我的数据看起来像:

OrderID CustomerID  ItemID  ItemName
10000   1234        111111  Product A
10000   1234        222222  Product B
10000   1234        333333  Product C
20000   5678        111111  Product A
20000   5678        222222  Product B
20000   5678        333333  Product C
Run Code Online (Sandbox Code Playgroud)

我想在SQL Server中编写一个T-SQL查询来返回如下数据:

<Root>
  <Order>
    <OrderID>10000</OrderID>
    <CustomerID>1234</CustomerID>
    <LineItem>
      <ItemID>11111</ItemId>
      <ItemName>Product A</ItemName>
    </LineItem>
    <LineItem>
      <ItemID>22222</ItemId>
      <ItemName>Product B</ItemName>
    </LineItem>
    <LineItem>
      <ItemID>33333</ItemId>
      <ItemName>Product B</ItemName>
    </LineItem>
  </Order>
  <Order>
    <OrderID>20000</OrderID>
    <CustomerID>5678</CustomerID>
    <LineItem>
      <ItemID>11111</ItemId>
      <ItemName>Product A</ItemName>
    </LineItem>
    <LineItem>
      <ItemID>22222</ItemId>
      <ItemName>Product B</ItemName>
    </LineItem>
    <LineItem>
      <ItemID>33333</ItemId>
      <ItemName>Product B</ItemName>
    </LineItem>
  </Order>
</Root>
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下方法返回XML中的查询:

FOR XML …
Run Code Online (Sandbox Code Playgroud)

sql-server for-xml-path

22
推荐指数
2
解决办法
3万
查看次数

FOR XML PATH(''):转义"特殊"字符

此代码基本上将基于一个字符串中的位置的字符转换为另一个字符串中相同位置的字符,并且它针对表中的所有行运行.

当我运行它(简化版)时:

DECLARE @R           char(40)
DECLARE @U           char(40)
SET @R=' abcdefghijklmnopqrstuvwxyz!@#$%^&*()_+'+char(181)
SET @U=REVERSE(@R)

DECLARE @TestTable TABLE (RowID int identity(1,1) primary key, Unreadable  varchar(500))
INSERT INTO @TestTable VALUES ('+µt$zw!*µsu+yt!+s$xy')
INSERT INTO @TestTable VALUES ('%*!!xµpxu!(')
INSERT INTO @TestTable VALUES ('pxpµnxrµu+yµs%$t')


    ;WITH CodeValues AS
    (
    SELECT
        Number,SUBSTRING(@R,Number,1) AS R,ASCII(SUBSTRING(@U,Number,1)) AS UA
        FROM Numbers
        WHERE Number<=LEN(@R)
    )
    SELECT
        t.RowID
            ,(SELECT
                  ''+c.R
                  FROM Numbers               n
                      INNER JOIN CodeValues  c ON ASCII(SUBSTRING(t.Unreadable,n.Number,1))=c.UA
                  WHERE n.Number<=LEN(t.Unreadable) 
                  FOR XML PATH('') 
             ) AS readable
        FROM @TestTable t
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:

RowID       readable …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2005 for-xml-path

15
推荐指数
1
解决办法
2万
查看次数

在sql server中将"&lt;"和"&gt;"替换为"<"和">"

嗨,我是xml的新手

我有这样的查询

SELECT  ProjectId, 
       ProjectCode, 
       ProjectName, 
       TechId, 
      -- LocationId, 

      ( SELECT GeoId,PoliticalDivisionId ,GeographicLocationName,IsoCode,Longitude,Latitude,ParentLocationId,
       t2.CreatedBy,t2.CreatedOn,t2.LastUpdatedBy,t2.LastUpdatedOn
    FROM GeographicLocation t2
    WHERE GeoId = t1.LocationId
    FOR XML  PATH('Location') ),
       RtoId, 
       CreatedBy,
       CreatedOn,
       LastUpdatedBy,
       LastUpdatedOn
FROM Project t1
where ProjectId=1
FOR XML PATH('ProjectInfo')
Run Code Online (Sandbox Code Playgroud)

它将xml返回为

<ProjectInfo>
<ProjectId>1</ProjectId>
<ProjectCode>US-W1-00001</ProjectCode>
<ProjectName>Rees</ProjectName>
<TechId>1</TechId>
&lt;Location&gt;&lt;GeoId&gt;235&lt;/GeoId&gt;&lt;PoliticalDivisionId&gt;2&lt;/PoliticalDivisionId&gt;&lt;GeographicLocationName&gt;UNITED STATES&lt;/GeographicLocationName&gt;&lt;IsoCode&gt;US&lt;/IsoCode&gt;&lt;/Location&gt;
<RtoId>3</RtoId>
<CreatedBy>1</CreatedBy>
<CreatedOn>2013-06-30T20:55:21.587</CreatedOn>
<LastUpdatedBy>1</LastUpdatedBy>
<LastUpdatedOn>2013-06-30T20:55:21.587</LastUpdatedOn>
Run Code Online (Sandbox Code Playgroud)

prject标签以<和>的形式显示.但是Location的内部标签显示为"<"和">"如何用<和>替换它们

更新:问题中出现了一个小错误.内部xml不适用于rtoid,它适用于位置

我将查询更新为

SELECT  ProjectId, 
       ProjectCode, 
       ProjectName, 
       TechId, 
      -- LocationId, 

      replace(replace( ( SELECT GeoId,PoliticalDivisionId ,GeographicLocationName,IsoCode,Longitude,Latitude,ParentLocationId,
       t2.CreatedBy,t2.CreatedOn,t2.LastUpdatedBy,t2.LastUpdatedOn
    FROM GeographicLocation t2
    WHERE GeoId = t1.LocationId
    FOR XML  PATH('Location') ), '&lt;', …
Run Code Online (Sandbox Code Playgroud)

sql-server for-xml for-xml-path

11
推荐指数
2
解决办法
7万
查看次数

TSQL:FOR XML PATH('')无法分组

我正在尝试使用FOR XML PATH('')TSQL 按特定列对列值进行分组.这是两种情况下的结果(请注意,没有XML代码 - 即:SELECT * FROM @xml- 与XML代码相同):

Class          |     Animals
=================================
Asteroidea     |     Starfish
Mammalia       |     Dog
Mammalia       |     Cat
Mammalia       |     Coyote
Reptilia       |     Crocodile
Reptilia       |     Lizard
Run Code Online (Sandbox Code Playgroud)

根据这篇文章这篇文章(请注意,第二篇文章遗漏了GROUP BY,我不确定作者如何设法在没有它的情况下解决这个问题 - 我已经尝试过它只生成所有值),语法应该是如下图所示:

DECLARE @xml TABLE(
    Animal VARCHAR(50),
    Class VARCHAR(50)
)

INSERT INTO @xml
VALUES ('Dog','Mammalia')
    , ('Cat','Mammalia')
    , ('Coyote','Mammalia')
    , ('Starfish','Asteroidea')
    , ('Crocodile','Reptilia')
    , ('Lizard','Reptilia')

SELECT x1.Class
    , STUFF((SELECT ',' + x2.Animal AS [text()] 
    FROM @xml …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server-2008-r2 for-xml-path

9
推荐指数
1
解决办法
8518
查看次数

如何使用FOR XML PATH避免子节点中的命名空间?

我想直接从数据库创建一个站点地图xml文件(包括图像),而不需要其他进程(如转换或其他技巧).

我的查询是:

;WITH XMLNAMESPACES(
    DEFAULT 'http://www.sitemaps.org/schemas/sitemap/0.9',
    'http://www.google.com/schemas/sitemap-image/1.1' as  [image] )  
SELECT  
    (SELECT             
        'mysite'    as [loc],
        (select   
            'anotherloc'
            as [image:loc]
        for XML path('image:image'), type
        )
    for xml path('url'), type
)
for xml path('urlset'), type
Run Code Online (Sandbox Code Playgroud)

返回:

<urlset xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <loc>mysite</loc>
    <image:image xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
      <image:loc>anotherloc</image:loc>
    </image:image>
  </url>
</urlset>
Run Code Online (Sandbox Code Playgroud)

但我需要这个输出,没有重复的名称空间声明:

<urlset xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>mysite</loc>
    <image:image>
      <image:loc>anotherloc</image:loc>
    </image:image>
  </url>
</urlset>
Run Code Online (Sandbox Code Playgroud)

t-sql namespaces for-xml-path

8
推荐指数
1
解决办法
9070
查看次数

如何在不转义特殊字符的情况下在查询中使用FOR XML PATH('')?

我有这个问题:

SELECT DISTINCT
            f.CourseEventKey,
            (
                SELECT      f.Title + '; ' AS [text()]
                FROM        @Facilities
                WHERE       CourseEventKey = f.CourseEventKey
                ORDER BY    f.Title
                FOR XML PATH('')
            ) Facilities
FROM        @Facilities f
Run Code Online (Sandbox Code Playgroud)

它产生这个结果集:

CourseEventKey Facilities
-------------- -----------------------------------
29             Test Facility 1; 
30             Memphis Training Room; 
32             Drury Inn &amp; Suites Creve Coeur;
Run Code Online (Sandbox Code Playgroud)

数据很好,但&amp;实际上是编码的&,不适合我的目的.

如何修改此查询以返回数据中特殊字符的原始值?

sql t-sql sql-server escaping for-xml-path

7
推荐指数
2
解决办法
3840
查看次数

如何使用for xml路径查询结果阻止sqlcmd截断

在读完一个答案第二个答案以及sqlcmd上infopage之后,我仍然无法让以下工作.

我试图使用批处理文件中的sqlcmd将结果查询到xml文件中.

批处理文件如下所示:

sqlcmd -R -d DBName -i "c:\inputquery.sql" -h-1 -y 0 -o "c:\outputfile.xml"
Run Code Online (Sandbox Code Playgroud)

简化的SQL查询是:

:XML ON
SELECT '<?xml version="1.0" encoding="UTF-8"?>' +
CAST((
SELECT Columns FROM Table
FOR XML PATH ('Product'), ROOT('Products')
) 
AS NVARCHAR(MAX))
Run Code Online (Sandbox Code Playgroud)

输出是一个大约1025Kb的xml文件,一个截断的字符串.我认为它截断到1mb,但你怎么能阻止这个呢?目标是将完整的查询结果放入xml文件中.据我所知,所有选项都已使用.顺便使用TSQL SSMS2008.

xml t-sql batch-file sql-server-2008 for-xml-path

7
推荐指数
1
解决办法
3429
查看次数

SQL Server:使用FOR XML PATH嵌套元素

我想嵌套我的每个XML元素.

请看以下示例:

DECLARE @TempTable TABLE
(
    [Column1] char(10),
    [Column2] char(10)
);

INSERT INTO @TempTable([Column1], [Column2]) VALUES
('some value', 'some value'),
('some value', 'some value'),
('some value', 'some value'),
('some value', 'some value')

SELECT (
    SELECT * FROM @TempTable
FOR XML PATH('Row'), TYPE)
FOR XML PATH('ParentRow'), ROOT('Root')
Run Code Online (Sandbox Code Playgroud)

这将返回以下XML:

  <Root>
    <ParentRow>
      <Row>
        <Column1>some value</Column1>
        <Column2>some value</Column2>
      </Row>
      <Row>
        <Column1>some value</Column1>
        <Column2>some value</Column2>
      </Row>
      <Row>
        <Column1>some value</Column1>
        <Column2>some value</Column2>
      </Row>
      <Row>
        <Column1>some value</Column1>
        <Column2>some value</Column2>
      </Row>
    </ParentRow>
  </Root>
Run Code Online (Sandbox Code Playgroud)

这不是我想要格式化XML的方式.相反,我希望每个<Row>元素都<ParentRow>包含如下元素: …

xml sql sql-server nested for-xml-path

6
推荐指数
1
解决办法
4417
查看次数

在Linq lambda表达式(GROUP_CONCAT/STRING_AGG)中,XML PATH和Stuff的等价物是什么?

我有这样一张桌子:

EmployeeId  EmployeeName ItemName
4           Ganesh       Key Board
4           Ganesh       Processor
1           Jignesh      Key Board
1           Jignesh      Mouse
1           Jignesh      Processor
3           Rakesh       Key Board
2           Tejas        Key Board
2           Tejas        Mouse
2           Tejas        Processor
Run Code Online (Sandbox Code Playgroud)

我需要查询这个,就好像itemname不同employeeid,employeename我们应该将项目分为','.

就像下面给出的那个:

EmployeeId  EmployeeName ItemName
1           Jignesh      Key Board, Mouse, Processor
2           Tejas        Key Board, Mouse, Processor
3           Rakesh       Key Board
4           Ganesh       Key Board, Processor
Run Code Online (Sandbox Code Playgroud)

这是SQL查询: OPs屏幕Scuck的STUFF黑客,我无法OCR

任何人都可以帮助我将上述SQL查询转换为Lambda表达式吗?

sql linq lambda substring for-xml-path

6
推荐指数
1
解决办法
5989
查看次数