使用 sp_xml_preparedocument 和直接从 xml 参数选择有什么区别

2024-01-03

我在 MSSQL 2012 中有一个存储过程。

sp 获取 xml 数据类型并将数据插入表中

我发现我可以使用两个选项。

option 1

DECLARE @strXML AS xml  
SET @strXML = '<DocumentElement><LocationData><SL_ID>2</SL_ID>
<IsDefault>1</IsDefault></LocationData><LocationData><SL_ID>3</SL_ID>
<IsDefault>0</IsDefault></LocationData></DocumentElement>'



SELECT 
    'SL_ID' = x.v.value('SL_ID[1]','int'),
    'IsDefault' = x.v.value('IsDefault[1]','int')
 FROM @strXML.nodes('DocumentElement/LocationData') x(v)

option 2

DECLARE @strXML AS xml  
SET @strXML = '<DocumentElement><LocationData><SL_ID>2</SL_ID>
<IsDefault>1</IsDefault></LocationData><LocationData><SL_ID>3</SL_ID>
<IsDefault>0</IsDefault></LocationData></DocumentElement>'



DECLARE @hDoc int


EXEC sp_xml_preparedocument @hDoc OUTPUT, @strXML

SELECT SL_ID,IsDefault
FROM OPENXML(@hDoc, 'DocumentElement/LocationData')
WITH 
(
   SL_ID int 'SL_ID',
   IsDefault int 'IsDefault'
)

EXEC sp_xml_removedocument @hDoc

它们之间有什么不同


有什么不同?

很简单:一个是好的,另一个是坏的????

FROM OPENXML使用相应的 SP 来准备和删除已过时的文档,不应再使用(存在极少数例外)。而是使用适当的XML 数据类型提供的方法 https://msdn.microsoft.com/en-us/library/ms190798.aspx.

SQL-Server 不会将 XML 存储为您看到的字符串,而是存储为层次结构树结构。您看到的 XML 是在您阅读时为您构建的。所有修改,所有搜索/过滤XPath and XQuery是针对一个类似桌子的树。这速度快得惊人,因为不需要进行字符串解析(这只在 XML 被推送到原生 XML 类型).

老式的方法FROM OPENXML将一遍又一遍地进行这个昂贵的过程......

And 很重要: 现代方法完全ad-hoc (inlined),而旧方法需要按程序工作(不能在VIEW或在一个内联TVF)

一些背景:

阅读此链接了解sp_xml_preparedocument https://learn.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-xml-preparedocument-transact-sql:

[ xmltext ] 是原始 XML 文档。 MSXML 解析器解析此 XML 文档。 xmltext 是文本参数:char、nchar、varchar、 nvarchar、text、ntext 或 xml。

您传入的参数将作为字符串处理。如果你传入一个real XML它需要重建一个字符串表示内部 XML 树的一部分只是为了再次执行昂贵的解析过程。可能是,该过程足够聪明,可以识别该参数是一个XML已经可以处理这个更高的性能,但我对此表示怀疑......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 sp_xml_preparedocument 和直接从 xml 参数选择有什么区别 的相关文章

  • 在activity_main.xml中注释

    我是安卓新手 据我所知 XML 中的注释与 HTML 中的注释相同 使用 形式 我想在 Android 项目的 Activity main xml 配置文件中写一些注释 但它给了我错误 值得注意的是 我使用的是 Eclipse 但目前 我直
  • 用户“”登录失败,无法打开登录请求的数据库“Database1.mdf”。登录失败。用户“rBcollo-PC\rBcollo”登录失败

    所以 我几乎解决了所有问题 但现在我要处理另一个问题 我使用了这个连接字符串 SqlConnection con new SqlConnection Data Source SQLEXPRESS Database Database1 mdf
  • EOutOfMemory 使用 Delphi 创建大型 XML

    我正在使用 Delphi 从关系数据库中的数据创建 XML 文档 它在小数据集上测试得很好 但是当我尝试将数据集的大小扩展到生产级别时 它最终在节点创建期间因 EOutOfMemory 异常而崩溃 我正在使用放在表单上的 TXMLDocum
  • 将 SQL Server 与 Dart 结合使用

    我还没有找到很好的答案 所以我想尝试一下得到答案 将 Microsoft SQL Server 与 Dart 结合使用的最佳方式是什么 我需要它能够从基本上任何操作系统 网络和移动设备上使用它 我觉得最好的方法可能是 GraphQL 但我对
  • 从流中过滤/删除无效的 xml 字符

    首先 我无法更改 xml 的输出 它是由第三方生成的 他们在 xml 中插入无效字符 我得到了 xml 字节流表示形式的 InputStream 除了将流消耗到字符串中并对其进行处理之外 是否有一种更干净的方法来过滤掉有问题的字符 我找到了
  • 无法删除 Access 中 SQL 表上的注册表

    我有一个在 Access 应用程序中链接的 SQL Server 表 如果我尝试使用删除查询删除记录 则没有问题 但是 如果我尝试直接在表中删除记录或在数据表模式下使用选择查询 Access 不允许我删除记录并引发以下警告 Microsof
  • 如何使用 Windows 身份验证指定 Windows 用户从 ASP 连接到 MS SQL Server 数据库

    我已经尝试了一个多月的时间来将这里的 ASP 脚本连接到 SQL Server 数据库 但每次我使用这个连接字符串时 Data Source dbServer01 Initial Catalog POS123 Integrated Secu
  • T-SQL:用最新的非空值替换 NULL 的最佳方法?

    假设我有这张表 id value 1 5 2 4 3 1 4 NULL 5 NULL 6 14 7 NULL 8 0 9 3 10 NULL 我想编写一个查询来替换任何NULL值与表中最后一个不为空的值在那一栏里 我想要这个结果 id va
  • 如何访问 Scala XML 中的父元素

    The scala xml包表示带有标记树节点的 XML 但是这棵树在 Scala 2 7 中是单向的吗 因为似乎没有办法访问Elem给定的父级Elem 这似乎同样适用于父母Document 例如 在 XOM 中你有getParent an
  • 加密数据库字段的好方法?

    我被要求加密数据库中的各种数据库字段 问题是这些字段在读取后需要解密 我在用着Django and SQL Server 2005 有什么好主意吗 See 在 SQL Server 2005 数据库中使用对称加密 https web arc
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • 更改列时快速删除并重新创建多个索引、视图、统计信息

    我的 项目 表中有一个 StoreNumber 列 我想将其更改为 NOT NULL 我最近清理了所有旧数据 以便不存在空条目 但是 当我执行以下语句时 由于对各种视图 索引和统计信息的多重依赖 它失败了 ALTER TABLE Proje
  • 弹簧隔离支持吗? SQL快照隔离

    我们正在使用 SQL Server 快照隔离可能是提高性能和解决一些死锁问题的好方法 假设我们确实需要更改为快照隔离 我似乎找不到一种简单的方法来在 Springs 上启用快照隔离 Transactional 我发现以下 hibernate
  • 在 System.Xml.XPath 中启用 XPath2 查询(XPathException:无效令牌)

    Microsoft 的 System Xml XPath nuget package 可用于 NET 4 6 声称支持 XPath 1 0 和 2 0 德文档 https msdn microsoft com en us library s
  • 使用 Dapper 插入时出现 NullReferenceException

    当我运行以下代码时 我收到一个 NullReferenceException 异常 指出对象引用未设置到该对象的实例 我已经使用不太复杂但格式相同的对象成功插入了 dapper 所以我不确定我做错了什么 public void Foo IE
  • 如何从 SQL Server 2008 查询结果中删除“NULL”

    我有一个包含 59 列和超过 17K 行的表 很多行都有NULL在某些列中 我想删除NULL以便查询返回空白 而不是NULL 我可以运行一些更新功能来替换所有NULL with 使用 SQL Server 2008R2 Management
  • 是否有适用于 SQL Server Express 的 SQL Server Profiler? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有适用于 SQL Server Express 的 SQL Server Profiler 也许是开源的 或者也许只是一个可以帮助我查
  • 解析带下划线的 SQL Server 数字文字

    我想知道它为什么有效以及为什么它不返回错误 SELECT 2015 11 Result 11 2015 第二种情况 SELECT 2 1 a a 2 1 检查元数据 SELECT name system type name FROM sys
  • 数字表与递归 CTE 生成一系列数字

    为什么使用数字表比使用递归 CTE 动态生成它们要快得多 在我的机器上 给定一张桌子numbers单列n 主键 包含从1到100000的数字 查询如下 select n from numbers 大约需要 400 毫秒才能完成 使用递归 C
  • SQL 更新 - 更新选定的行

    我正在使用 SQL Server 2008 我有一个名为MYTABLE有两列 ID STATUS 我想编写一个存储过程来返回其记录STATUS是 0 但是这个存储过程必须更新STATUS返回行数为 1 如何在单个查询中执行此选择和更新操作

随机推荐

  • Webpack vue-loader 为单页 .vue 组件提供“意外的令牌 {”

    我主要是一名 C 后端开发人员 正在尝试学习 Vue js 我使用 Visual Studio 2017 ASP NET MVC 作为 API 一种布局 Vue js Webpack vue单页组件文件由以下方式加载vue loader a
  • $state.go 之后未调用 Ionic 控制器

    我有一个控制器 当第一次从第一个控制器打开状态时 它会从后端应用程序获取数据 它会加载数据 但是当它尝试再次打开它时 它不会加载新数据 具体方法如下 if selectedServiceID 000 state go balanceInqu
  • 使用 UIWebView+AFNetworking 时的链接如下

    我正在尝试 AFNetworking 2 0 的新功能UIKit AFNetworking扩展为UIWebView loadRequest progress success failure 到目前为止一切顺利 但是在发出初始请求后 由用户交
  • 正则表达式替换字符串末尾的“...”

    我有一个像这样的字符串 text1 python is fun 我想将多个 替换为一个 仅当它们位于字符串末尾时 我希望输出为 python is fun 所以当只有一个 时位于字符串末尾 则不会被替换 text2 python is fu
  • D3选择性变焦

    我正在研究一种带有一些附加功能的力导向图形布局 可选择的链接 节点 工具提示 鱼眼效果 以及对我的问题很重要的缩放和平移 现在 缩放效果非常好 如下所示 d3 append svg g call d3 behavior zoom on zo
  • 我可以让 gcc 在运行时计算结果为 NaN 或 inf 时告诉我吗?

    有没有办法告诉 gcc 抛出 SIGFPE 或类似的东西来响应计算结果NaN or inf在运行时 就像被零除一样 我已经尝试过 fsignaling nans标志 这似乎没有帮助 几乎所有从非 NaN 输入生成 NaN 的浮点运算或数学库
  • jooQ spring boot 多模式(读写分离)

    我想将 jooQ 与 Spring Boot 一起使用 我有主从架构 所以我想将 jooQ 与主从架构一起使用 主用于写入 从用于读取 我应该如何进行 现在我使用 pom xml 来配置 jooQ
  • 在后台启动 Flask 服务器

    我有一个烧瓶应用程序 目前正在按以下方式启动 phantom py author uruddarraju from phantom api v1 import app app run host 0 0 0 0 port 8080 debug
  • 设置全局 CURL 超时

    我正在使用专有的第 3 方 Drupal 模块 该模块通过curl 查询第 3 方服务 该服务最近有点不稳定 这使我的页面加载速度大大减慢 当我有大量流量时 我会达到 max connections 该扩展查询的信息并不重要 但它足够重要
  • 如何在 Element UI 表行中正确设置链接(应该很简单?)

    我在 Element UI 中得到了一张包含用户项目的表 由于 Element UI 不适用于 tr tr 我对如何处理这件事有点困惑 该表的目的是显示用户的项目并对其执行基本的 CRUD 操作 这意味着对于每一行 都应该显示一个唯一的 I
  • 将 YYYYMMDD 更改为 MM/DD/YYYY

    所以我的日期是 20170529 但每当我尝试将其格式化为日期时 单元格就会变成 所以通常情况下 这意味着列宽太小 但即使当我扩展列时 它也只是显示 我如何将这些转换为日期 DATEVALUE TEXT A1 0000 00 00 并将结果
  • 我们可以将变量从一个 C 程序传递到另一个 C 程序吗?

    所以我想将一个变量从一个c 程序传递到另一个c 程序 例如 main char str Hello there system program2 exe 我想用str in program2 exe 有没有办法将变量传递给另一个程序 我使用文
  • 当单元格中的文本发生变化时,如何执行函数? (谷歌文档)

    我一直在寻找一个函数 当某个单元格中的某些文本等于某些内容时 可以更改一行中所有单元格的颜色 我在这里找到了它 Google 电子表格 当单元格更改文本时更改行颜色的脚本 https stackoverflow com questions
  • 缩短字符串时 std::string::resize 和 std::string::erase 之间的区别

    当缩短一个std string基本上有两种可能性 string resize length or string erase length 鉴于我们知道字符串会变小 那么两者之间有什么区别 resize必须检查是否length gt curr
  • Xcode 7 从 XCUIElement 转换为不相关类型“String”在获取 JSON 时始终失败

    我试图从 JSON 数组中获取值 但收到错误 从 XCUIElement 进行转换 不相关的字符串总是失败 我正在使用 Xcode 7 和 iOS 9 1 我的代码如下 let url NSURL string urlAsString le
  • 如何在 Ember.js 中动态加载部分/视图/模板

    所以我有以下设置 在主页上 基于来自使用夹具数据的模型的列表显示生成器列表 现在 当单击其中一个生成器链接时 会显示一个新页面 其中包含一些根据该夹具数据动态生成的输入字段 到目前为止 一切都很完美 现在 当我更改生成器页面中的输入字段的值
  • 使用sql server Convert函数将hijri转换为公历日期

    我的桌子上有一个简单的桌子sql server在我的表中有一个日期字段 并在日期字段中保存一个hijri date 我想用sql server转换函数进行转换hijri date to gregorian date 我怎样才能做到这一点 我
  • 在 VS2015 的开发人员命令提示符中找不到 dnx 命令

    刚刚安装了 Visual Studio 2015 RC 当我打开Developer command prompt for VS2015并输入dnx它说 dnx 不被识别为内部或外部命令 可操作 程序或批处理文件 请注意 两天后我发现如果我输
  • 轻量且快速的 android json 解析器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我开始项目时 我选择了 GSON 因为它已经完成得最多 并且得到了良好的支持 我现在感觉表现不是很好
  • 使用 sp_xml_preparedocument 和直接从 xml 参数选择有什么区别

    我在 MSSQL 2012 中有一个存储过程 sp 获取 xml 数据类型并将数据插入表中 我发现我可以使用两个选项 option 1 DECLARE strXML AS xml SET strXML