返回顶部
首页 > 资讯 > 精选 >运用SQL SERVER 2005 CLR解决XML 的实例分析
  • 321
分享到

运用SQL SERVER 2005 CLR解决XML 的实例分析

2023-06-17 21:06:48 321人浏览 独家记忆
摘要

运用SQL Server 2005 CLR解决XML 的实例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。大家都知道sql SERVER 2005 CLR(

运用SQL Server 2005 CLR解决XML 的实例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

大家都知道sql SERVER 2005 CLR(公共语言运行库),而在编程中SQL Server 开发人员和数据库管理员 (DBA) 有时会遇到这种情况,即用户在工作高峰期向服务器提交长时间运行的查询,因而降低了服务器的响应速度。在这里给大家将介绍两种方法可以防止这一情况的发生:
1.DBA 可使用 sp_configure 将 query Governor cost limit 选项设置为特定阈值。(这是一个高级选项。)该阈值在整个服务器内是有效的。
2.要影响连接的阈值,DBA 可以使用 SET QUERY_GOVERNOR_COST_LIMIT 语句。

可以想像一下需要更细粒度控制的情况。例如,用户可能有三个等效但语法结构不同的查询,并希望以执行速度尽可能最快的形式自动提交该查询。此外,用户还可能希望不执行任何估计执行成本超过特定阈值的查询。以编程方式访问查询成本,将允许用户通过控制基于估计执行成本的查询提交过程来构建服务器友好的应用程序。本文中描述的技术允许使用 SQLCLR 用户定义的过程、XPath、XQuery 以及 Visual C# 技术,以编程方式访问查询的估计执行成本。如本文所述,通过用户定义的过程使用 SQLCLR 来访问 SQL Server 2005 的基本技术也可用于其他应用程序。

在 SQL Server 2005 中,可以使用 .net Framework 中可用的任何编程语言(例如 Microsoft Visual Basic .NET 或 Visual C#)来定义用户定义的类型、函数、过程以及聚合。从概念上讲,在定义了用户定义的实体后,就可以在 SQL Server 中使用该实体,就像是由 SQL Server 本身提供的实体一样。例如,定义用户定义的 T 类型之后,还可以定义带有一列 T 类型的关系型表。定义了用户定义的 P 过程后,就可以使用 EXEC P 调用该过程,就像 Transact-SQL 过程一样。

使用 SQL SERVER 2005 CLR 存储过程和进程内数据访问提取查询成本

实现该解决方案
1. .NET Framework 语言(本文中使用 Visual C#)定义存储过程,该过程将从给定查询的 XML Showplan 中获得查询成本。
2.正在运行 SQL Server 的服务器注册此过程。此操作需要两个子步骤:
1) SQL Server 中注册该程序集。
2)建一个引用外部 CLR 方法的存储过程。

运用SQL SERVER 2005 CLR解决XML 的实例分析

显示用于创建用户定义的 CLR 存储过程的示意图。

以下步骤循序渐进地介绍该解决方案的过程。

A 包含一个 Visual C# 程序 (ShowplanXPath.cs),该程序从运行 SQL Server 的服务器中提取 XML 格式的 Showplan,然后在获得的 Showplan 上执行 XPath 表达式,以提取估计查询执行成本。第一步包括,使用 Visual C# 编译器编译该程序并生成一个 DLL (ShowplanXPath.dll)。可使用以下命令行来进行编译。该命令生成一个名为 ShowplanXPath.dll 的 DLL:

<path-to-.NET-framework>\csc.exe   /out:ShowplanXPath.dll  /target:library   /reference:<path-to-.NET-framework>\System.dll  /reference:<path-to-.NET-framework>\System.Data.dll  /reference:<path-to-SQL-Server-installation>\sqlaccess.dll  ShowplanXPath.cs

其中,应该将替换为指向 Microsoft .NET Framework 位置的正确路径,例如

C:\WINNT\Microsoft.NET\Framework\v2.0.40607

或将其添加到系统环境变量 PATH 中。请注意,您需要根据计算机上安装的 .NET Framework 的版本来修改“v2.0.40607”。将替换为指向 SQL Server 2005 安装的二进制文件的正确路径,例如

"C:\Program Files\MicrosoftSQL Server\MSSQL.1\MSSQL\Binn\"

如果该路径包含空格,那么就像本示例那样将该路径用引号括起来。

下一步,使用客户端(例如 SQL Server 2005 Management Studio)发布的以下 Transact-SQL 命令来让 SQL Server 2005 知道该程序集 (ShowplanXPath.dll):

use AdventureWorks   go   CREATE ASSEMBLY ShowplanXPath   FROM '<path-to-compiled-DLL>\ShowplanXPath.dll'   go

替换为指向第一步所编译 DLL 的位置的路径。

注册的程序集 (ShowplanXPath.dll) 中创建引用外部 CLR 方法的用户定义的存储过程。

CREATE PROCEDURE dbo.GetXMLShowplanCost   (   @tsqlStmt   NVARCHAR(MAX),   @queryCost   NVARCHAR(MAX) OUT   )   AS EXTERNAL NAME ShowplanXPath.xmlshowplanaccess.GetXMLShowplan   go

请注意,此外部名称的逻辑格式为:assembly_name.class_name.method_name。@tsqlStmt 参数将包含一个查询,而且将使用 OUT 参数 @queryCost 返回查询成本。

端使用以下代码调用 CLR 用户定义的存储过程:

DECLARE @query nvarchar(max)-- the query   DECLARE @cost nvarchar(max)-- its estimated execution cost   -- set this to your query   set @query = N'select * from person.address'   -- execute the procedure   EXECdbo.GetXMLShowplanCost @query, @cost OUTPUT   select @cost-- print the cost   -- note that @cost is nvarchar, we use explicit comparison in case of an error    -- and implicit conversion for actual cost   if (@cost != '-1') and (@cost <= 0.5)-- if query is cheap to execute,   EXEC(@query)-- execute it; else don't execute   -- replace 0.5 with your own threshold   go

请注意,可以通过 @query 变量提交一组查询(一个批处理),然后返回该批处理的总成本。如果查询或批处理中有错误,则返回“-1”作为其成本。可以修改附录 A 中的异常处理代码,以便在出现错误时能更好地满足您的需要。

输出参数 @cost 将该查询的估计执行成本返回到客户端。如步骤 4 中的代码示例所示。

端可根据 @cost 的值,选择是否将该查询提交到 SQL Server 来加以执行,如步骤 4 中的代码所示。

运用SQL SERVER 2005 CLR解决XML 的实例分析


显示执行存储过程的主要步骤

一旦调用该过程,它就会接收到一个成本有待估计的查询。
2.CLR 存储过程将 SHOWPLAN_XML 模式设置为 ON。不执行提交到该连接的任何语句;然而,将为这些语句生成 showplan。将该查询本身发送到 SQL Server。
3.该服务器以 XML 格式逐段返回此 showplan,然后 Visual C# 程序将这些片段整理在一起。
4.该过程将 SHOWPLAN_XML 模式设置为 OFF。
5. CLR 存储过程准备并以 XML 格式在 showplan 上执行一个 XPath 表达式,以提取查询成本。该批处理中每条语句中的每个查询计划的成本均被提取并总计。
6.估计查询执行成本返回到调用程序中。如果 SQL 代码中出现错误,则返回“-1”作为成本。

注 DLL 与 SQL Server 之间的通信称为进程内数据访问,这是因为已将该 DLL 链接到 SQL Server 进程。由于已将 DLL 动态链接到该 SQL Server 进程,因此交换数据并不跨越 SQL Server 进程边界。当执行进程内数据访问时,只能将 XPath 查询发送到 SQL Server;XQuery 查询不能使用进程内数据访问。使用就是 SQL SERVER 2005 CLR 存储过程和进程内数据访问提取查询成本的一个案例。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: 运用SQL SERVER 2005 CLR解决XML 的实例分析

本文链接: https://lsjlt.com/news/293020.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 运用SQL SERVER 2005 CLR解决XML 的实例分析
    运用SQL SERVER 2005 CLR解决XML 的实例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。大家都知道SQL SERVER 2005 CLR(...
    99+
    2023-06-17
  • sql server 2005数据修改的示例分析
    这篇文章主要为大家展示了“sql server 2005数据修改的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“sql server 2005数据修改的...
    99+
    2024-04-02
  • SQL Server中的XML数据类型实例分析
    本篇内容主要讲解“SQL Server中的XML数据类型实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL Server中的XML数据类型实例分析”吧!SQL Se...
    99+
    2023-06-30
  • SQL Server中使用判断语句的实例分析
    本篇内容主要讲解“SQL Server中使用判断语句的实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL Server中使用判断语句的实例分析”吧!SQL Server判断语句(IF ...
    99+
    2023-06-20
  • Sql Server事务语法及使用方法的实例分析
    这篇文章将为大家详细讲解有关Sql Server事务语法及使用方法的实例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。实例讲述了Sql Server事务...
    99+
    2024-04-02
  • Sql Server事务语法及使用方法实例分析
    本文实例讲述了Sql Server事务语法及使用方法。分享给大家供大家参考,具体如下: 事务是关于原子性的。原子性的概念是指可以把一些事情当做一个不可分割的单元来看待。从数据库的角度看,它是指应全部执行或全...
    99+
    2024-04-02
  • Sql Server数据库常用Transact-SQL脚本的示例分析
    这篇文章主要介绍了Sql Server数据库常用Transact-SQL脚本的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Tran...
    99+
    2024-04-02
  • SQL Server CPU 利用率毛刺的分析定位与解决
    一.背景 1.1 问题描述 近期发现一台SQL Server的CPU利用率很不稳定,发现不定时的飙升到100%,更可怕的是在业务繁忙时,影响了业务调用,失败率明显增加,所以,减低CPU的利用率,是迫切需要解决的问题。  CPU升高的原因直...
    99+
    2016-01-19
    SQL Server CPU 利用率毛刺的分析定位与解决
  • 实例解析Android中使用Pull解析器解析XML的方法
    1.Pull简介 Pull解析器是Android系统内置的的,Pull解析器与SAX解析器类似,他提供了类似的事件,如开始元素和介绍元素的事件,使用parser.next()可...
    99+
    2022-06-06
    解析xml XML 方法 Android
  • Android中常用的XML生成方法实例分析
    本文实例讲述了Android中常用的XML生成方法。分享给大家供大家参考。具体如下: 1. java代码: package com.android.antking.xml; ...
    99+
    2022-06-06
    XML 方法 Android
  • SQL Server数据库中的表名称和字段实例分析
    这篇文章主要介绍“SQL Server数据库中的表名称和字段实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SQL Server数据库中的表名称和字段实例分析...
    99+
    2024-04-02
  • pymysql解决sql注入问题的示例分析
    这篇文章将为大家详细讲解有关pymysql解决sql注入问题的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. SQL 注入SQL 注入是非常常见的一种网络攻击...
    99+
    2024-04-02
  • Python通过DOM和SAX方式解析XML的应用实例分享
    XML.DOM 需求 有一个表,里面数据量比较大,每天一更新,其字段可以通过xml配置文件进行配置,即,可能每次建表的字段不一样。 上游跑时会根据配置从源文件中提取,到入库这一步需要根据配置进行建表。 解决...
    99+
    2022-06-04
    应用实例 方式 DOM
  • 实例分析nodejs模块xml2js解析xml过程中遇到的坑
    本文实例讲述了nodejs模块xml2js解析xml过程中遇到的坑。分享给大家供大家参考,具体如下: 在一个项目中,用到nodejs模块xml2js解析xml,xml的数据如下: <xml>...
    99+
    2022-06-04
    过程中 实例 模块
  • Java反射的运用方法实例分析
    今天小编给大家分享一下Java反射的运用方法实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。反射反射定义对象可以通过反...
    99+
    2023-06-29
  • python中的运算符使用实例分析
    本篇内容介绍了“python中的运算符使用实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、比较运算符比较运算符主要是True和Fa...
    99+
    2023-06-30
  • Sql Server 开窗函数Over()的使用实例详解
    利用over(),将统计信息计算出来,然后直接筛选结果集 declare @t table( ProductID int, ProductName varchar(20), ProductTy...
    99+
    2024-04-02
  • PHP 点操作符的运用与实例分析
    PHP 点操作符的运用与实例分析 在PHP中,点操作符(“.”)是用来连接两个字符串的运算符,它在字符串拼接时非常常用并且十分灵活。通过使用点操作符,我们可以方便地将多个字符串连接起来...
    99+
    2024-04-02
  • SQL Server解析/操作Json格式字段数据的方法实例
    目录1 json存储2 json操作3其他总结1 json存储 在sqlserver 中存储json ,需要用字符串类型进行存储,一般用nvarchar()或 varcha...
    99+
    2024-04-02
  • 利用explain排查分析慢sql的实战案例
    目录一 概述1.0 sql调优的过程1.1 优化索引口诀1.1.1 全值匹配我最爱1.1.2  最佳左前缀法则,带头大哥不能死, 中间兄弟不能断;1.1.3&nb...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作