标签: xquery-sql

xQuery LIKE-operator(开头)

该领域的价值如下

<en-US>Parameter23</en-US>
<it-IT>Parameter</it-IT>
Run Code Online (Sandbox Code Playgroud)

SQL查询是

select * 
from parametermaster 
where cast(ParameterName as xml).exist('en-US/text()[contains(.,"P")]') = 1
Run Code Online (Sandbox Code Playgroud)

而我正试着这样做

select * 
from parametermaster 
where cast(ParameterName as xml).exist('en-US/text()[starts-with(.,"P")]') = 1
Run Code Online (Sandbox Code Playgroud)

是错误的

消息2395,级别16,状态1,行1
的XQuery [存在()]:没有功能'{} http://www.w3.org/2004/07/xpath-functions:开始-与()'

任何人都可以帮助我,我想在SQL 2005 XQuery中创建LIKE运算符的感觉.我是XQuery的新手.

xml sql-server-2005 where-clause xquery-sql sql-like

4
推荐指数
2
解决办法
8090
查看次数

在T-SQL中更新没有文本的XML字段

我在更新SQL字段时遇到了一个问题,因为我编写的内容对于存在文本的xml节点非常有效,但是当节点为空时它会跳闸.

<filemeta filetype="Video">
  <heading>TEST</heading>
  <description />
</filemeta>
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常;

UPDATE filemetaDB SET filemeta.modify('replace value of (/filemeta/heading/text())[1] with "TEST"');
Run Code Online (Sandbox Code Playgroud)

然而这打破了;

UPDATE filemetaDB SET filemeta.modify('replace value of (/filemeta/description/text())[1] with "notworking!"');
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

t-sql sql-server-2008 xquery-sql

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

需要帮助Local.name(.)xquery函数

任何人都可以告诉我Local.name(.)xquery函数是如何工作的.关于sql构建问题我在论坛上发帖提问,他们给我答案.其中使用了Local.name(.)xquery函数,但语法不是很清楚.

;with cte as
(
select x.i.value('local-name(.)','nvarchar(MAX)') as colname
,x.i.value('.','nvarchar(max)') as data
from @x.nodes('/Record/DELETED/*') as x(i))
Run Code Online (Sandbox Code Playgroud)

这行xivalue('local-name(.)','nvarchar(MAX)')的含义是colname为什么'local-name(.)'什么是local-name(.)是什么意思.再次xivalue('.','nvarchar(max)')作为数据请详细解释两行.我不是提前用户.非常感谢.

请指导我.谢谢

t-sql sql-server xquery-sql

3
推荐指数
1
解决办法
2202
查看次数

修改通过交叉应用识别的 XML 值

我遇到了存储在数据库 XML 列中的某些值的数据问题。我将问题重现为以下示例:

设置脚本:

create table XMLTest
(
    [XML] xml
)

--A row with two duff entries
insert XMLTest values ('
    <root>
        <item>
            <flag>false</flag>
            <frac>0.5</frac>
        </item>
        <item>
            <flag>false</flag>
            <frac>0</frac>
        </item>
        <item>
            <flag>false</flag>
            <frac>0.5</frac>
        </item>     
        <item>
            <flag>true</flag>
            <frac>0.5</frac>
        </item>
    </root>
    ')
Run Code Online (Sandbox Code Playgroud)

在 XML 部分中,不正确的条目是那些带有<flag>false</flag>和 的条目<frac>0.5</frac>,因为 的值flagtrue为非零frac值。

以下 SQL 标识需要更新的 XML 项目节点:

select
    i.query('.')
from
    XMLTest
    cross apply xml.nodes('root/item[flag="false" and frac > 0]') x(i)
Run Code Online (Sandbox Code Playgroud)

我想要进行更新以更正这些节点,但我不知道如何item修改cross apply. 我看到更新看起来像这样:

 update …
Run Code Online (Sandbox Code Playgroud)

xml sql sql-server sql-server-2008 xquery-sql

3
推荐指数
1
解决办法
2678
查看次数

Xquery中[1]的意义是什么?

我是SQL Server中xquery的新手.

我经常遇到使用[1]和属性的xquery表达式.

有人可以解释一下这是什么意思吗?

这是一个例子

declare @aa xml
set @aa='<data>
  <row>
    <Value>1</Value>
    <Text>Masters</Text>
  </row>
  <row>
    <Value>2</Value>
    <Text>Transactions</Text>
  </row>
  <row>
    <Value>3</Value>
    <Text>Misch. Reports</Text>
  </row>
</data>'


select a.f.value('Value[1]','varchar(50)'),   --  why [1] here ?
   a.f.value('Text[1]','varchar(50)')         --  and here too..
 from @aa.nodes('/data/row') as a(f)
Run Code Online (Sandbox Code Playgroud)

谢谢你的问候

t-sql sql-server xquery sql-server-2005 xquery-sql

3
推荐指数
1
解决办法
1584
查看次数

如何解码&amp; 等使用XQuery/SQL?

使用Microsoft SQL Server ...

declare @x xml
set @x = '<Example>&lt;You &amp; Me&gt;</Example>'
select cast(@x.query('/Example/text()') as nvarchar(50))
Run Code Online (Sandbox Code Playgroud)

结果是"< You& Me>" 而不是"<你和我>".

我怎样才能让SQL以'<','&'的方式读取XML 和'>' 解码?

sql sql-server xpath xquery xquery-sql

3
推荐指数
1
解决办法
3789
查看次数

测试XML列中的特定节点值,包括可能为空的节点

我在SQL Server 2008数据库中有一个XML列,其值类似于以下简化示例:

情况1

<root>
    <child>sometimes text here</child>
    <otherstuff ..... />
</root>
Run Code Online (Sandbox Code Playgroud)

案例2

<root>
    <child/>
    <otherstuff ..... />
</root>
Run Code Online (Sandbox Code Playgroud)

给定一个字符串值,我希望能够选择"子"节点中具有特定值的行,包括案例2的选择.

例如,如果我有一个局部变量:

declare @queryText nvarchar(MAX)
select @queryText = 'sometimes text here'
Run Code Online (Sandbox Code Playgroud)

我可以通过以下方式选择与案例1匹配的行:

select * from [my_table] 
where [my_xml_column].exist('/root/child[text()=sql:variable("@queryText")]') = 1
Run Code Online (Sandbox Code Playgroud)

但是,对于情况2,我希望@queryText =''或@queryText = NULL可以工作,但两者都不匹配.

作为一种解决方法,我可以使用:

select * from [my_table]
where [my_xml_column].value('(/root/child)[1], 'nvarchar(MAX)') = @queryText
Run Code Online (Sandbox Code Playgroud)

这是有效的,但它让我觉得我错过了一些东西并使用肮脏的解决方法来测试存在与.value()而不是.exist()...是否有类似的表达式我可以[并且应该?]使用在.exist()中匹配特定文本还是空节点?有没有理由关注可读性?当有人指出我错过的任何明显的东西时,我期待着即将到来的脸谱.:)

xml sql-server xquery-sql

3
推荐指数
1
解决办法
5125
查看次数

SQL中的更新(替换部分值)XML列

我的表中有一个 XML 列,我想用新文本替换该列中出现的任何特定文本。这是xml结构,

<Story>
 <StoryNonText>
  <NonText>
   <ImageID>1</ImageID>
   <Src>http://staging.xyz.com/FolderName/1.png</Src>
  </NonText>
  <NonText>
   <ImageID>2</ImageID>
   <Src>http://staging.xyz.com/FolderName/2.png</Src>
  </NonText>
 </StoryNonText>
</Story> 
Run Code Online (Sandbox Code Playgroud)

在上面的 XML 中,我想将所有<Src>具有http://staging.xyz.com/的值替换为http://production.xyz.com/。请指导我如何做到这一点!

xml sql t-sql sql-server xquery-sql

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

在 SQL Server 中使用 XQuery 将 XML 转换为表数据

是否可以在 SQL Server 中使用 XQuery 从输出中获得下表

编辑:我的要求发生了变化,考虑我有一个表,其中存储了以下 xml 和 UserID

DECLARE  @XML xml
set @XML = '<Security>
             <FiscalYear Name="2012">
            <Country Id="204">
              <State Id="1">
                <City Id="10"></City>
              </State>
              <State Id="2">
                <City Id="20"></City>
                <City Id="30"></City>
              </State>
              <State Id ="3"></State>
              </Country >
            </FiscalYear>
        </Security>'

CREATE TABLE #tmp_user
(UserID INT,SecurityXML XML)

INSERT INTO #tmp_user
        ( UserID, SecurityXML )
VALUES  ( 1, 
          @XML
          )
Run Code Online (Sandbox Code Playgroud)

现在我怎样才能得到 ao/p 喜欢

输出:

 UserID StateID       CityID
     1      1           10
     1      2           20
     1      2           30
     1      3            0
Run Code Online (Sandbox Code Playgroud)

有可能实现吗?

sql xquery-sql

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

在SQL Server XML列中更新XML属性

我正在尝试更新我的XML中存储在SQL Server XML列中的节点,如果我的XML在XML元素中,则下面的行可行,但现在我需要将其更改为XML属性,显然该行变为无效改变之后.

适用于XMLElement:

UPDATE  [Customers] 
SET  voucherXML.modify('replace value of (/ArrayOfCampaignVoucher/CampaignVoucher/Qty/text())[1] with "50"') 
WHERE  voucherXML.value('(/ArrayOfCampaignVoucher/CampaignVoucher/VouCode)[1]', 'nvarchar(50)') = @VoucherCode 
Run Code Online (Sandbox Code Playgroud)

我尝试改变这样的语句,但没有运气,没有错误,但QTY值不会改变值@NewQuantity:

UPDATE [Customers]  
       SET voucherXML='<ArrayOfCampaignVoucher xmlns:xsd="http://www.w3.org/2001/XMLSchema" Qty="' + CAST(@NewQuantity AS NVARCHAR(16)) + '" />'  
   WHERE voucherXML.value('(/CampaignVoucher/VouCode)[1]', 'nvarchar(50)') = @VoucherCode 
Run Code Online (Sandbox Code Playgroud)

这就是我的XML在SQL Server XML列中的外观:

<ArrayOfCampaignVoucher xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <CampaignVoucher VouCode="Vouc001" Qty="16" />
  <CampaignVoucher VouCode="Vouc002" Qty="18" />
  <CampaignVoucher xsi:nil="true" />
</ArrayOfCampaignVoucher>
Run Code Online (Sandbox Code Playgroud)

xml sql sql-server xquery-sql

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

使用XQuery求和

我正在使用XQuery来执行添加.以下是保存在数据库中的XML结构:

    <Events>
        <Event>
            <id>1</id>
            <code>1001</code>
            <Amount>50,1</Amount>
        </Event>
        <Event>
            <id>1</id>
            <code>1002</code>
            <Amount>5,5</Amount>
        </Event>
             <Event>
            <id>1</id>
            <code>1001</code>
            <Amount>50,1</Amount>
        </Event>
        <Event>
            <id>1</id>
            <code>1002</code>
            <Amount>5,5</Amount>
        </Event>
    </Events>
Run Code Online (Sandbox Code Playgroud)

我想通过使用XQuery获得低于输出:具有相同代码的金额之和.请注意,..我需要更换,.和执行运算.

 <Total>               
            <1001> 100,2 </1001>
            <1002> 11,0 </1002>
   </Total>
Run Code Online (Sandbox Code Playgroud)

xquery xquery-sql

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