[英]How to read(assign) tableID for multiple values for one other column from XML into SQL Server table?
對不起,如果這個問題聽起來很愚蠢而且我是 XML 的新手。
我有顯示表名及其所有列名的 XML 元數據。 在下面的這個例子中,我想將所有 4 個列名讀入 4 行,並將表名添加到列名的每次迭代中。 但是通過我的嘗試,我只能部分實現輸出。 它要么顯示一個列名及其各自的表名,要么不顯示表名但顯示所有列。 任何建議都非常感謝。 提前致謝!
到目前為止,我已經嘗試實現一個表,然后使用兩種方法讀取值。 我想檢索 4 行和 2 列(表 @Name,字段),這里的表名應該為所有四個不同的列名重復“CD_SAP_T000”。
方法#1 :
DECLARE @xml XML = '<ROOT>
<Table Name="CD_SAP_T000">
<Field>CCCATEGORY</Field>
<Field>MANDT</Field>
<Field>MTEXT</Field>
<Field>ORT01</Field>
</Table>
</ROOT>'
SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT 1)) rowId,
x.Y.value('@Name[1]', 'VARCHAR(100)') AS TableName,
x.y.value('.', 'NVARCHAR(200)' ) AS ColumnName
FROM
@xml.nodes('//*[text()]') AS x(y)
方法 #1 的結果:
rowId TableName ColumnName
--------------------------
1 NULL CCCATEGORY
2 NULL MANDT
3 NULL MTEXT
4 NULL ORT01
方法#2 :
IF OBJECT_ID('dbo.myTable') IS NOT NULL
DROP TABLE dbo.myTable
CREATE TABLE [dbo].[myTable]
(
[Name] VARCHAR(100) NULL,
[Field] VARCHAR(100) NULL
);
DECLARE @Z_xml XML
SET @Z_xml = '<ROOT>
<Table Name="CD_SAP_T000">
<Field>CCCATEGORY</Field>
<Field>MANDT</Field>
<Field>MTEXT</Field>
<Field>ORT01</Field>
</Table>
</ROOT>'
INSERT INTO myTable (Name, Field)
SELECT
x.mytable.value('@Name[1]', 'VARCHAR(100)'),
x.mytable.value('Field[1]', 'VARCHAR(100)')
FROM
@Z_xml.nodes('//ROOT/Table') AS x ( mytable )
SELECT * FROM mytable
方法 #2 的結果:
Name Field
--------------------------
CD_SAP_T000 CCCATEGORY
一種方法是將“字段”節點交叉應用於相應的“表”節點。
SELECT t.node.value('(@Name)[1]', 'varchar(MAX)') table_name,
c.node.value('(text())[1]', 'varchar(MAX)') column_name
FROM @Z_xml.nodes('/ROOT/Table') t(node)
CROSS APPLY t.node.nodes('./Field') c(node);
或者,您可以使用此 XQuery 一次性獲取表名和列名 - 無需CROSS APPLY
:
-- get a list of all <Field> XML elements
SELECT
-- grab the parent node's (<Table>) "Name" attribute as the table name
TableName = XC.value('(../@Name)[1]', 'VARCHAR(100)'),
-- grab the <Field> text value as column name
ColumnName = XC.value('(.)[1]', 'VARCHAR(100)')
FROM
@Z_xml.nodes('/ROOT/Table/Field') AS XT(XC)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.