【问题标题】:Do I need to use T-SQL Rowset?我需要使用 T-SQL 行集吗?
【发布时间】:2011-03-12 10:21:49
【问题描述】:

所以我正在尝试将作为 Oracle 应用程序的 Web 服务转换为 T-SQL。有趣的是我只有 Web 服务代码,根本没有数据库代码。我看到有一个输入参数包含<ROWSET><ROW NUM=\"1\"><TRANSACTIONID>123456</TRANSACTIONID></ROW></ROWSET>

我正在浏览 T-SQL 的文档,但我似乎找不到任何有用的信息来说明我可以用这个 xml 做什么。据我了解,它用于将值插入表中,因为每次调用中的元素都不相似。

任何帮助将不胜感激。

【问题讨论】:

    标签: sql-server tsql rowset


    【解决方案1】:

    假设XML 是您的T-SQL 存储过程或函数的参数,您可以使用OPENXML 实用程序来处理此类数据。 Here 是一个完整的示例(为了清楚起见,在此处重新发布):

    DECLARE @idoc int
    DECLARE @doc varchar(1000)
    SET @doc ='
    <people>
      <person id="1">
        <firstname>John</firstname>
        <surname>Doe</surname>
      </person>
      <person id="2">
        <firstname>Mary</firstname>
        <surname>Jane</surname>
      </person>
    </people>
    '
    /* Create an internal representation of the XML document */
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
    -- Execute a SELECT statement that uses the OPENXML rowset provider.
    SELECT    *
    FROM       OPENXML (@idoc, '/people/person',1)
                WITH (id varchar(20),
                      firstname varchar(20) 'firstname',
                      surname varchar(20) 'surname')
    EXECUTE sp_xml_removedocument @idoc
    

    结果:

    id  firstname       surname
    1   John            Doe
    2   Mary            Jane
    

    【讨论】:

    • 嗯。如果子元素是动态的,那会起作用吗?例如,名字可能存在,也可能不存在,或者可能还有其他元素......?
    • @Jisaak - 是的,它会正常工作。对于不存在的元素,您将返回 NULL(例如,在我上面的示例中取出 Mary 并重新运行它以查看此内容)。如果存在其他元素,它们不会造成任何伤害。
    • 好的。我试图使用它更新一个表并且遇到了一些问题。我会保持简单,然后从那里开始。谢谢!
    • 是的。区分大小写:1 - 我:0。现在开始使用这些值更新表。
    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2014-03-29
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多