针对SQLServer查询xml属性中的元素值和xml查询语句这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展SQLServerServer查询–计数不同的DateTime字段、SQLSer
针对SQL Server查询xml属性中的元素值和xml查询语句这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展SQL Server Server查询 – 计数不同的DateTime字段、SQL Server中的XML查询、SQL Server查询中特殊字符的处理方法 (SQL Server特殊符号的转义处理)、SQL Server查询优化中的两个选项等相关知识,希望可以帮助到你。
本文目录一览:- SQL Server查询xml属性中的元素值(xml查询语句)
- SQL Server Server查询 – 计数不同的DateTime字段
- SQL Server中的XML查询
- SQL Server查询中特殊字符的处理方法 (SQL Server特殊符号的转义处理)
- SQL Server查询优化中的两个选项
SQL Server查询xml属性中的元素值(xml查询语句)
抱歉,如果还有其他地方,我发现了很多类似的示例,但无法将其用于我的数据。2天后,我需要一个答案:(
基本上有一个SQL Server表,其中的列包含XML数据。此数据包含我需要提取的值。
这是我的XML。
<CustomFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.kaseya.com/vsa/2007/12/ServiceDeskDefinition.xsd"> <Field fieldName="AutoCategory">Event Log</Field> <Field fieldName="SType">Event Log</Field> <Field fieldName="STag1">AgentGuid</Field> <Field fieldName="STag2">AlertRegistrationId</Field> <Field fieldName="STag3">LogType</Field> <Field fieldName="SValue1">619764177412541</Field> <Field fieldName="SValue2">104</Field> <Field fieldName="SValue3">1380569194</Field> <Field fieldName="SdTicketId">RPSv1006330</Field> <Field fieldName="AgentName">bla bla</Field> <Field fieldName="MachineGroupGuid">86115414719112271316891312</Field> <Field fieldName="OrgFk">59165166782128125214185317</Field> <Field fieldName="GuidAgent">619764177412541</Field> <Field fieldName="AlertCount">0</Field> <Field fieldName="TicketTitle">bla bla</Field> <Field fieldName="LegacyId">152262</Field> <Field fieldName="LegacyRef">152262</Field> <Field fieldName="CwStatus">2</Field> <Field fieldName="CwTicketId">89495</Field></CustomFields>
我需要能够提取与CwTicketId
字段名称关联的值。
因此,从本质上讲,我想浏览XML以找到具有的节点fieldName = "CwTicketId"
并返回89495
或等效值。
下面是我自己编写的代码,这些代码提取了值,但是问题是XML有时以不同的顺序排列,因此值并不总是在我指定的行上,因此它返回准确的数据。
;WITH XMLNAMESPACES(DEFAULT N''http://www.kaseya.com/vsa/2007/12/ServiceDeskDefinition.xsd'')SELECT ref as ServiceDeskID, sdSummary as ServiceDeskSummary, customFields.value(''(/CustomFields/Field/node())[17]'', ''varchar(100)'') as LegacyIDTicketing, customFields.value(''(/CustomFields/Field/node())[19]'', ''varchar(100)'') as CWIDTicketingFROM [ksubscribers].[kasadmin].[SDIncident]
我还需要第二个值,但是如果我能弄清楚如何提取一个值,则可以为另一个值重复。
希望有人能帮到我,因为我已经开始撕头发了!
谢谢您的帮助!!
答案1
小编典典;WITH XMLNAMESPACES(DEFAULT N''http://www.kaseya.com/vsa/2007/12/ServiceDeskDefinition.xsd'')select T.C.value(''data(.)'', ''nvarchar(128)'')from [YOUR_TABLE] as Y outer apply Y.[YOUR_XML_COLUMN].nodes(''/CustomFields/Field[@fieldName="CwTicketId"]'') as T(C)
SQL Server Server查询 – 计数不同的DateTime字段
Date 19/5/2009 12:00:00 pm 19/5/2009 12:15:22 pm 20/5/2009 11:38:00 am
什么是获取类似这样的sql语法?
日期计数
19/5/2009 2
20/5/2009 1
解决方法
SELECT CONVERT(VARCHAR(10),YourDateColumn,101),COUNT(*) FROM YourTable GROUP BY CONVERT(VARCHAR(10),101)
我通常会这样做,因为它避免了转换到varchar.
SELECT DATEPART(yy,YourDateColumn),DATEPART(mm,DATEPART(dd,COUNT(*) FROM YourTable GROUP BY DATEPART(yy,YourDateColumn)
编辑:另一种获取日期时间的日期部分的方法
DATEADD(d,DATEDIFF(d,YourDateColumn))
SQL Server中的XML查询
我刚刚开始在SQL
Server数据库中查询XML。我在使用最基本的查询时遇到了麻烦。这是一个简化的示例。如何返回说明?下面的SELECT语句是我正在使用的内容,但未返回任何内容。
SELECT Incidents.IncidentXML.query(''data(/dsIncident/IncidentInformation/Description)'') AS Description FROM Incidents
这是我正在使用的XML文件的代码段:
<dsIncident xmlns="http://tempuri.org/dsIncident.xsd"> <IncidentInformation> <Description>This is the description.</Description> <Country>Singapore</Country> </IncidentInformation></dsIncident>
答案1
小编典典好吧,您错过了XML名称空间!:-)
试试这个:
SELECT Incidents.IncidentXML.query(''declare namespace x="http://tempuri.org/dsIncident.xsd"; (/x:dsIncident/x:IncidentInformation/x:Description)'') AS Description FROM Incidents
魔术是
declare namespace x="http://tempuri.org/dsIncident.xsd"
在此部分-它声明了对该XML数据进行查询期间的名称空间(带有您选择的前缀-可以是任何内容-在这里为“ x”)。
希望那会有所回报!;-)
SQL Server查询中特殊字符的处理方法 (SQL Server特殊符号的转义处理)
SQL Server查询中特殊字符的处理方法 (SQL Server特殊符号的转义处理)
SQL Server查询中,经常会遇到一些特殊字符,比如单引号''等,这些字符的处理方法,是SQL Server用户都应该需要知道的。
我们都知道SQL Server查询过程中,单引号“''”是特殊字符,所以在SQL Server查询的时候要转换成双单引号“''''”。
但这只是特殊字符的一个,在实际项目中,发现对于like操作还有以下特殊字符:下划线“_”,百分号“%”,方括号“[]”以及尖号“^”。
其用途如下:
下划线:用于代替一个任意字符(相当于正则表达式中的 ? )
百分号:用于代替任意数目的任意字符(相当于正则表达式中的 * )
方括号:用于转义(事实上只有左方括号用于转义,右方括号使用最近优先原则匹配最近的左方括号)
尖号:用于排除一些字符进行匹配(这个与正则表达式中的一样)
以下是一些匹配的举例,需要说明的是,只有like操作才有这些特殊字符,=操作是没有的。
a_b... a[_]b%
a%b... a[%]b%
a[b... a[[]b%
a]b... a]b%
a[]b... a[[]]b%
a[^]b... a[[][^]]b%
a[^^]b... a[[][^][^]]b%
在实际进行处理的时候,对于=操作,我们一般只需要如此替换:
'' -> ''''
对于like操作,需要进行以下替换(注意顺序也很重要)
[ -> [[] (这个必须是第一个替换的!!)
% -> [%] (这里%是指希望匹配的字符本身包括的%而不是专门用于匹配的通配符)
_ -> [_]
^ -> [^]
SQL Server查询优化中的两个选项
本文中,我们将介绍两个SQL Server中的可用概念,它们是使用SQL Server时值得注意的技术。
1. OPTIMIZE FOR Unknown
SQL Server 2005版本中增加了OPTIMIZE FOR提示(hint),允许DBA确定用于基数评估和优化的字面值。如果我们有一张数据分布倾斜的表,OPTIMIZE FOR能被用于优化为广泛范围参数值提供合理性能的通用值。当对所有参数值来说性能并非最好时,相比有时做查找(seek,对于选择性较好的参数值),有时做扫描(scan,对于选择性一般的参数值),所有场景具备同样的执行时间也许会更可取,这依赖于最初编译期间传入的参数值。
不幸的是,OPTIMIZE FOR仅允许字面值。如果变量为类似日期时间(datetime)或顺序数(其本质随时间而增长),那么,确定的任何固定值不久将因变得过时而不得不修改该提示来确定一个新值。即使该参数值域随时间保持相对稳定,但提供字面值时你不得不实验和发现一个足够好的通用值,这有时是很难的或很费时间的。
最后,为OPTIMIZER FOR提供数值将通过改变使用该参数的谓词基数评估而影响计划的选择。在OPTIMIZE FOR提示中,如果你提供了一个不存在或稀有值,那么,你就减少了基数评估值,这将会影响成本和最终计划的选择。
如果你只想得到一个“平均”值而并不关心该值是什么,OPTIMIZE FOR (@variable_name UNKNOWN)提示将导致优化器忽略影响基数评估的这个参数值。取而代之是用柱状图,基数评估将由密度、关键信息或依赖谓词的固定选择性评估得出。这将导致一个并不需要DBA必须一直监视和改变参数值来维护一致性能的可预见评估。
语法变化将告诉优化器忽视所有参数值,这只需确定OPTIMIZE FOR UNKNOWN并漏掉括号和变量名。确定OPTIMIZE FOR将导致ParameterCompiledValue从showplan XML输出中消失,正像参数嗅探(sniffing)没有发生一样。不管传递的参数,最终计划将是一样的,并且,也许会给出更加可预见的查询性能。
2. QUERYTRACEON 和QUERYRULEOFF
有些场景中,开发人员也许建议用跟踪标志(trace flag)来避免查询计划或优化器问题。或者,他们也许发现禁用某个特定优化器规则会阻止特定问题的发生。一些跟踪标志很常见,以至于难以预见开启这些跟踪标志是否能很好的解决所有查询问题,或该问题是否只针对研究的特定查询。类似的,大多数优化器规则并非本身不好,整个系统范围内禁用该规则可能会导致其他方面的性能退化。
SQL Server 2008中,可以在特定查询运行期间开启某个跟踪标志,或通过如下未被归档QUERYTRACEON或QUERYRULEOFF提示仅在查询编译期间禁用某个优化器规则。
select @v_test=c1from t1 where c1=2 option(recompile,querytraceon 2389);
select @v_test=c1from t1 where c1=2 option(recompile,queryruleoff OmitMyidx);
上述第二个语句显示的语法也许会导致“no plan”错误。预先未与开发人员讨论以确保完全理解该规则及禁用可能带来的后果,就不应该使用QUERYRULEOFF。数据库属主通常拥有创建一个计划指导(plan guide)所需的足够权限,而用QUERYTRACEON/QUERYRULEOFF提示创建一个计划指导则需要sysadmin权限,因为改变这些设置也许有系统而非数据库范围的含义。
结论
最后,清楚你的环境中何时使用这些查询优化或查询调优技术很重要,请在使用这些技术前,分析具体情况并进行足够的测试。.
我们今天的关于SQL Server查询xml属性中的元素值和xml查询语句的分享已经告一段落,感谢您的关注,如果您想了解更多关于SQL Server Server查询 – 计数不同的DateTime字段、SQL Server中的XML查询、SQL Server查询中特殊字符的处理方法 (SQL Server特殊符号的转义处理)、SQL Server查询优化中的两个选项的相关信息,请在本站查询。
本文标签: