以下の状況についてサポートが必要です:
私のテーブルSQLServer 2012にはxml値を持つフィールドがあります。そのフィールドでデータを選択し、フォームの列に結果を表示したいと思います。
<row>
<ID_Cota>162986</ID_Cota>
<ID_Taxa_Plano>1000</ID_Taxa_Plano>
<ID_Plano_Venda>1020</ID_Plano_Venda>
<ID_Pessoa>18522</ID_Pessoa>
</row>
ありがとうございました。
_CROSS APPLY
_および 。nodes XMLデータ型のメソッドを使用します。たとえば、次のようにします。
_IF OBJECT_ID('dbo.yourTable') IS NOT NULL DROP TABLE dbo.yourTable
GO
CREATE TABLE dbo.yourTable (
rowId INT IDENTITY PRIMARY KEY,
ST_Registro_Del XML
)
GO
INSERT INTO dbo.yourTable ( ST_Registro_Del )
SELECT '<row>
<ID_Cota>162986</ID_Cota>
<ID_Taxa_Plano>1000</ID_Taxa_Plano>
<ID_Plano_Venda>1020</ID_Plano_Venda>
<ID_Pessoa>18522</ID_Pessoa>
</row>'
GO
SELECT
r.c.value('(ID_Cota/text())[1]', 'INT' ) AS ID_Cota,
r.c.value('(ID_Taxa_Plano/text())[1]', 'INT' ) AS ID_Cota,
r.c.value('(ID_Plano_Venda/text())[1]', 'INT' ) AS ID_Cota,
r.c.value('(ID_Pessoa/text())[1]', 'INT' ) AS ID_Cota
FROM dbo.yourTable yt
CROSS APPLY yt.ST_Registro_Del.nodes('row') r(c)
WHERE rowId = 1
_
これが私の結果です:
_.nodes
_メソッドは、XMLから結果セットを返します。型指定されていないXML(つまり、XSDがXML列と_[1]
_序数に関連付けられていない)をクエリするときのパフォーマンスを向上させるには、text()
アクセサーを使用します。あなたが見つけます"。
HTH
私のxQueryはrustyであると私が最初に言うかもしれませんが、次のことがうまくいきました:
WITH xml_string
AS (
SELECT val = CAST('<row><ID_Cota>162986</ID_Cota><ID_Taxa_Plano>1000</ID_Taxa_Plano><ID_Taxa_Venda>1020</ID_Taxa_Venda><ID_Pessoa>18522</ID_Pessoa></row>' AS XML)
)
SELECT val,
(val).value('(/row[1]/ID_Cota[1])', 'INT'),
(val).value('(/row[1]/ID_Taxa_Plano[1])', 'INT'),
(val).value('(/row[1]/ID_Taxa_Venda[1])', 'INT'),
(val).value('(/row[1]/ID_Pessoa[1])', 'INT')
FROM xml_string;
テーブルからクエリを実行するように編集:
WITH xml_string
AS (
SELECT val = CAST('<row><ID_Cota>162986</ID_Cota><ID_Taxa_Plano>1000</ID_Taxa_Plano><ID_Taxa_Venda>1020</ID_Taxa_Venda><ID_Pessoa>18522</ID_Pessoa></row>' AS XML)
)
SELECT val
INTO ST_Registro_Del
FROM xml_string;
-- run from the table here:
SELECT val,
ID_Cota = (val).value('(/row[1]/ID_Cota[1])', 'INT'),
ID_Taxa_Plano = (val).value('(/row[1]/ID_Taxa_Plano[1])', 'INT'),
ID_Taxa_Venda = (val).value('(/row[1]/ID_Taxa_Venda[1])', 'INT'),
ID_Pessoa = (val).value('(/row[1]/ID_Pessoa[1])', 'INT')
FROM ST_Registro_Del
以下はあなたを助けます
declare @sql xml
set @sql = '<row>
<ID_Cota>162986</ID_Cota>
<ID_Taxa_Plano>1000</ID_Taxa_Plano>
<ID_Plano_Venda>1020</ID_Plano_Venda>
<ID_Pessoa>18522</ID_Pessoa>
</row>'
select s.n.value('(ID_Cota)[1]', 'int') as ID_Cota
,s.n.value('(ID_Taxa_Plano)[1]', 'int') as ID_Taxa_Plano
,s.n.value('(ID_Plano_Venda)[1]', 'int') as ID_Plano_Venda
,s.n.value('(ID_Pessoa)[1]', 'int') as ID_Pessoa
from @sql.nodes('/row') as s(n)