该领域的价值如下
<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的新手.
我在更新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)
谢谢你的帮助.
任何人都可以告诉我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)')作为数据请详细解释两行.我不是提前用户.非常感谢.
请指导我.谢谢
我遇到了存储在数据库 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>,因为 的值flag应true为非零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) 我是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)
谢谢你的问候
使用Microsoft SQL Server ...
declare @x xml
set @x = '<Example><You & Me></Example>'
select cast(@x.query('/Example/text()') as nvarchar(50))
Run Code Online (Sandbox Code Playgroud)
结果是"< You& Me>" 而不是"<你和我>".
我怎样才能让SQL以'<','&'的方式读取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 列,我想用新文本替换该列中出现的任何特定文本。这是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/。请指导我如何做到这一点!
是否可以在 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)
有可能实现吗?
我正在尝试更新我的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) 我正在使用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-sql ×11
sql-server ×7
sql ×5
xml ×5
t-sql ×4
xquery ×3
sql-like ×1
where-clause ×1
xpath ×1