sql xml 转datatable 存储过程 笔记

 


CREATE PROCEDURE P_GetTable_By_XML @XML XML
AS  
    SELECT  S.value('local-name(.)', 'NVARCHAR(20)') AS ColumnName
    INTO    #tColumns
    FROM    @XML.nodes('/Root/Schema/*') T ( S )

    DECLARE @strXML NVARCHAR(MAX) = 'DECLARE @XML XML = N'''
        + CAST(@XML AS NVARCHAR(MAX)) + ''''
  
    DECLARE @strTableSql NVARCHAR(MAX) = ' DECLARE @tResultTable Table ('
    DECLARE @strInsertSql NVARCHAR(MAX) = ' INSERT INTO @tResultTable ('
    DECLARE @strSelSql NVARCHAR(MAX) = ' select '
    DECLARE @strFromSql NVARCHAR(MAX) = ' FROM @XML.nodes(''/Root/Row'') T(S)'
    DECLARE @strSelectSql NVARCHAR(MAX) = 'SELECT * FROM @tResultTable'

    SELECT  @strTableSql = @strTableSql + '[' + a.ColumnName
            + '] NVARCHAR(max),' ,
            @strInsertSql = @strInsertSql + '[' + a.ColumnName + '],' ,
            @strSelSql = @strSelSql + 'S.value(' + '''' + '(' + a.ColumnName
            + ')[1]'' , ''NVARCHAR(max)''),'
    FROM    #tColumns a

    SET @strTableSql = LEFT(@strTableSql, LEN(@strTableSql) - 1) + ')'
    SET @strInsertSql = LEFT(@strInsertSql, LEN(@strInsertSql) - 1) + ')'
    SET @strSelSql = LEFT(@strSelSql, LEN(@strSelSql) - 1)

    EXEC(@strXML + @strTableSql + @strInsertSql + @strSelSql + @strFromSql + @strSelectSql)


    DROP TABLE #tColumns
GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值