Sql server 带SQL Server的XPath,不带命名空间
我有一个名为image的文本字段,它保存XML。下面是一个子集。没有定义名称空间,因此我使用通配符“*”Sql server 带SQL Server的XPath,不带命名空间,sql-server,xpath,xquery,Sql Server,Xpath,Xquery,我有一个名为image的文本字段,它保存XML。下面是一个子集。没有定义名称空间,因此我使用通配符“*” <?xml version="1.0"?> <NewDataSet> <delivery> <ticket>A430901474</ticket> <revision>00A</revision> </delivery> <tickets> <
<?xml version="1.0"?>
<NewDataSet>
<delivery>
<ticket>A430901474</ticket>
<revision>00A</revision>
</delivery>
<tickets>
<ticket>A430901474</ticket>
<revision>00A</revision>
<state>VA</state>
<county>PRINCE WILLIAM</county>
<lot>1</lot>
<st_from_address>15414</st_from_address>
</tickets>
</NewDataSet>
现在我回来了:
**LotNo**
<lot>1</lot>
**LotNo**
1.
您应该能够使用text()
节点测试仅获取文本值:
DECLARE @x xml
SET @x = (SELECT [image]
FROM [QM].[dbo].[ticket]
where ticket_id = 83831107)
SELECT @x.query('(/*:NewDataSet/*:tickets/*:lot/text())[1]')
您应该能够使用
text()
节点测试仅获取文本值:
DECLARE @x xml
SET @x = (SELECT [image]
FROM [QM].[dbo].[ticket]
where ticket_id = 83831107)
SELECT @x.query('(/*:NewDataSet/*:tickets/*:lot/text())[1]')
返回xml。。。所以,它不适合你的任务。因为您只请求一个值,所以可能需要使用():
返回xml。。。所以,它不适合你的任务。因为您只请求一个值,所以可能需要使用():
谢谢各位。两种解决方案都奏效了@Cannon,我的每张票只会有一个Lot值,但我将其添加到了我的库中,因为我肯定会有其他情况下存在节点列表。有没有办法测试图像文本字段,比如它是否是XML(或者甚至让@x认为它是XML)而不返回任何值?一些票据被解析为XML,而其他票据则是纯文本。纯文本不会有很多内容。@SpringerRider这可能是另一个问题。谢谢大家。两种解决方案都奏效了@Cannon,我的每张票只会有一个Lot值,但我将其添加到了我的库中,因为我肯定会有其他情况下存在节点列表。有没有办法测试图像文本字段,比如它是否是XML(或者甚至让@x认为它是XML)而不返回任何值?一些票据被解析为XML,而其他票据则是纯文本。纯文本不会有很多内容。@SpringerRider这可能是另一个问题。其中一个答案解决了您的问题吗?如果是这样,请不要忘记单击灰色复选标记将该答案标记为已接受。其中一个答案是否解决了您的问题?如果是这样,请不要忘记单击灰色复选标记,将该答案标记为已接受。
select @xml.value('(/*:NewDataSet/*:tickets/*:lot)[1]','int')
select
t.c.value('.', 'int') as Lot
from @xml.nodes('/*:NewDataSet/*:tickets/*:lot') as t(c)