Azure数据工厂中针对Azure SQL Server的XML文件验证



我的XML文件(位于Azure Blob容器中(

<?xml version="1.0" encoding="utf-8"?>
<Details xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Person>
    <id>2</id>
    <name>XXX</name>
    <age>12</age>
  </Person>
</Details>

我的Azure SQL Server表

表名称: usertable

ID   | NAME | AGE | GENDER    
1    | JAY  | 12  |  MALE
2    | XXX  | 11  |  MALE

我想将来自XML文件与上述Azure SQL Server(USERTABLE(进行比较,如果匹配,则我要 update xml文件中的其他字段与我的USERTABLE 如果不是这样,我想在Azure SQL Server中插入一个新的行,并将所有给定字段值从 xml到我的Usertable

插入。

任何人都可以建议我如何继续吗?

您可以使用一个登台表,在其中您将截断/加载XML数据,然后调用来自同一ADF的存储的Proc以根据登台表中的该分期数据进行插入/更新。在下一次运行期间,它将截断表,然后再次进行相同的过程。所有这些都可以通过您现有的ADF完成。

Azure SQL数据库最近使用散装插入或Openrowset从Azure Blob存储中加载文件的能力。从这里开始。

使用示例代码和数据,您可以导入XML,将其切碎,然后将MERGE用于INSERT/UPDATE将其用于主表中。一个简单的演示:

DROP TABLE staging 
DROP TABLE #tmp
DROP TABLE yourTable
CREATE TABLE staging ( rowId INT IDENTITY PRIMARY KEY, yourXML XML );
CREATE TABLE #tmp ( id INT PRIMARY KEY, name VARCHAR(30) NOT NULL, age INT NOT NULL );
SELECT * INTO yourTable FROM #tmp
INSERT INTO staging
SELECT *
FROM OPENROWSET(
    BULK 'archive/temp.xml',
    DATA_SOURCE = 'MyAzureBlobStorageAccount',
    SINGLE_BLOB
) AS x

INSERT INTO #tmp ( id, name, age )
SELECT
    x.c.value('(id/text())[1]', 'int' ) AS id,
    x.c.value('(name/text())[1]', 'varchar(30)' ) AS name,
    x.c.value('(age/text())[1]', 'int' ) AS age
FROM staging s
    CROSS APPLY s.yourXML.nodes('Details/Person') AS x(c)

-- Merge
MERGE INTO dbo.yourTable t
USING
(
SELECT * FROM #tmp
) s ON t.id = s.id
-- Insert new records ( no match on primary key )
WHEN NOT MATCHED BY TARGET
    THEN 
        INSERT ( id, name, age )
        VALUES ( id, name, age )
WHEN MATCHED 
        AND t.name != s.name
         OR t.age != s.age
-- Update existing ( no match on primary key )
THEN UPDATE 
        SET
            t.name = s.name,
            t.age = s.age;

SELECT *
FROM dbo.yourTable

最好的办法就是暂时忘记数据工厂。编写一个成功完成上述设置并成功运行的SQL脚本。当您完成该工作时,将其秘密到存储的Proc。测试它。当您进行此工作时,您可以开始考虑数据工厂。您将需要一个输出数据集,但不需要输入数据集。在此处通过教程进行工作。

相关内容

  • 没有找到相关文章

最新更新