随笔分类 - MS SQL Server
摘要:sql:variable()函数,在XQuery表达式内包含 SQL 关系值的变量。如下面xml:DECLARE@xmlXML='<Devs><langname="VB.NET"/><langname="C#.NET"/><langname="Java"/><langname="Javascript"/><langname="ASP.NET"/></Devs>'现在我们定义一个变量:DECLARE
阅读全文
摘要:最近的专案使用这个功能,开发时为程序使用了就定了一个系统帐号如sa,由于某些要求,此帐号不能被更改或是删除,但用户可以添加其它帐号。可以参考下面动画。实现这样的功能,也许方法有很多种。Insus.NET使用了SQL的触发器(Trigger),在删除或是更新做了触发。更新触发器,sa帐号不能被用户更新:tri_Users_UpdateSETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGO--=============================================--Author:Insus.NET--Createdate:2012-03-03--De
阅读全文
摘要:XML有很多函数,如upper-case可以把某些值显示或改写为大写。比如下面这个xml类型变量中,第5行与第6行属性值是小写,现想把它显示来大写。1DECLARE@xmlXML='2<Devs>3<langname="VB.NET"/>4<langname="C#.NET"/>5<langname="Java"/>6<langname="Javascript"/>7<langname="ASP.NET"/>8<
阅读全文
摘要:本演示,是把这篇:http://www.cnblogs.com/insus/archive/2012/02/29/2374826.html改为动态的T-SQL。宣告三个变量,第一个为@nodes :DECLARE@nodesNVARCHAR(MAX)='''/Devs/lang/@name'''第二个为@value:DECLARE@valueNVARCHAR(MAX)='''(.)'',''NVARCHAR(MAX)'''第三个为@sql,其实前两个变量也是为此变量所
阅读全文
摘要:本实例是演示SQL查询中XQuery使用COUNT函数。DECLARE@xmlXML='<Devs><langname="VB.NET"/><langname="C#.NET"/><langname="Java"/><langname="Javascript"/><langname="ASP.NET"/></Devs>'SELECTCOUNT(*)AS[Totals]FROM@xml.nodes(
阅读全文
摘要:本次演示,学会了元素本身(.)以及LIKE的操作。宣告一个xml的变量@xml并赋值给它。DECLARE@xmlXML='<Devs><langname="VB.NET"/><langname="C#.NET"/><langname="Java"/><langname="Javascript"/><langname="ASP.NET"/></Devs>'然后,我们可以使用LIKE操作,过滤到我们需
阅读全文
摘要:控制使用FLOWR替代XQuery路径表达式。FLOWR是For,Let,Where,Order by, Return的谓词首字母缩写。下面演示数据表,来自http://www.cnblogs.com/insus/archive/2012/02/26/2368323.html的[dbo].[tbDevLanguage]SELECT[ID],[languages].query('for$lin/Languages/languageorderby$l/@namereturn($l)')AS[language]FROM[dbo].[tbDevLanguage]for是XPath
阅读全文
摘要:在前一篇http://www.cnblogs.com/insus/archive/2012/02/25/2367857.html xml.modify()可以看到所在演示均是为变量的xml数据类型进行操作。Insus.NET想在此篇使用http://www.cnblogs.com/insus/archive/2012/02/25/2367701.html篇中创建的表[dbo].[tbDevLanguage]中的数据进行操作。也就是说以表的xml的数据类型进行演示。在演示之前,Insus.NET修改了此表,添加了一个主键字段,方便过滤记录时行更新。插入元素insert():UPDATE[dbo]
阅读全文
摘要:比如一串字符以某定义符号分隔,现我们需要以定义符号对这串字符进行拆分。可以使用XQuery的nodes()方法来实现。实现可参考到这篇:http://www.cnblogs.com/insus/archive/2012/02/25/2367743.html。不过Insus.NET把实现的方法写成一个自定义函数,在需要的地方调用即可。udf_StringSplit SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGO--=============================================--Author:Insus.NET--Createdat
阅读全文
摘要:现在Insus.NET来演示http://www.cnblogs.com/insus/archive/2012/02/24/2367323.html列表中最后一个函数xml.modify()。参考下表,xml.modify()函数有三个方法:函数方法说明xml.modify(insert)在使用的XML数据类型实例插入一个节点或节点的顺序。xml.modify(delete)删除指定的XQuery表达式的结果输出序列的零个或多个节点。xml.modify(replace)修改一个节点的值。首先来演示xml.modify(insert) ,为xml变量值插入一个元素<language na
阅读全文
摘要:这个演示,Insus.NET还是使用这篇的数据源,获取某一节点下元素所有属性值,并放在一个表中:http://www.cnblogs.com/insus/archive/2012/02/25/2367377.html把这个xml的数据转入一个表中。DECLARE@xmlXML='<Languages><languagename="VB.NET"/><languagename="C#"/><languagename="Java"/></Languages>'宣告
阅读全文
摘要:xml.query()函数,XQuery表达式可以返回xml一个单一的元素或是所有元素。我们继续使用上一篇所创建表[dbo].[tbDevLanguage] http://www.cnblogs.com/insus/archive/2012/02/25/2367668.html首先我们演示Query所有元素,注意一下查询节点,返回结果获取范围:SELECT[languages].query('/Languages')AS[language]FROM[dbo].[tbDevLanguage]SELECT[languages].query('/Languages/langu
阅读全文
摘要:上一篇是http://www.cnblogs.com/insus/archive/2012/02/25/2367377.html xml.exists()函数演示,而xml.value()函数是接受一个xQuery,并返回得到一个标量值。这里还是继续使用上一篇的数据。首先创建一个表:CREATETABLE[dbo].[tbDevLanguage]([languages]xml)把xml的数据Insert(插入)至刚才创建的表中:DECLARE@xmlXML='<Languages><languagename="VB.NET"/><lan
阅读全文
摘要:你可以看到前一篇http://www.cnblogs.com/insus/archive/2012/02/24/2367323.html XML的XQuery的五个操作方法中,有一个xml.exists()方法,现在Insus.NET作一些演示:宣告一个xml数据类型的变量,并赋值:DECLARE@xmlXML='<Languages><languagename="VB.NET"/><languagename="C#"/><languagename="Java"/></La
阅读全文
摘要:从SQL 2005开始支持了XML数据类型,并提供五个函数可操作。动作说明xml.exist()查询谓词用作判断,传入Xquery将返回三种结果0,1或NULL。0表示没有匹配的元素,1表示有一个匹配,而NULL表示没有查询XML数据。xml.value()接受一个XQuery作为输入并返回一个SQL Server的标量类型。xml.query()接受一个XQuery作为输入并返回输出XML数据类型的流。xml.nodes()接受一个XQuery作为输入并返回从XML文档中单一行集。从本质上讲,它将XML分成多个较小的XML结果。xml.modify()允许你插入,删除或修改节点或节点序列中的
阅读全文
摘要:计算一串数字中每个数字出现的次数,可以这样子,先判断输入的字符串是不是数字组成,还是否包含有其它字符。接下来拆分这一串字符串,每个字符插入一个表变量中,最后使用GROUP BY进行分组。CalNumOfChtInStr SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGO--=============================================--Author:Insus.NET--Createdate:2012-02-23--Description:Calculatethenumberofcharactersinthestring--====
阅读全文
摘要:Sample如:‘insus’ --> 's','u','s','n','i'转换字符串的字符成单个字符并用逗号分隔,这样可以在动态SQL中供SELECT动态调用至WHERE IN条件内。ConvertINString CREATEFUNCTION[dbo].[ConvertINString](@StringNVARCHAR(MAX))RETURNSNVARCHAR(MAX)ASBEGINDECLARE@ResultNVARCHAR(MAX)=N''DECLARE@IINT=LEN(@Stri
阅读全文
摘要:计算某当天的时间从0点0秒开始,某一时间点过了几秒。可以根据用户输入的时间,计算出午夜时间,然后使用DATEDIFF函数可以算出过几秒。如果获得午夜时间,可以参考:http://www.cnblogs.com/insus/archive/2011/09/09/2172419.html ,Insus.NET在此使用DATE(新版的SQL新增的日期类型,如SQL 2008 R2)完整函数:DurationSeconds CREATEFUNCTION[dbo].[DurationSeconds](@DateDATETIME)RETURNSINTASBEGINDECLARE@MidnightDATET
阅读全文
摘要:MS SQL没有一个如vb一样的Cstr的函数。平常在T-SQL开发过程中,却很想要这样的一个功能,把一个输入的值转换为string, 如果用户输入一个NULL值,却把它转为一个N''值。因此也写了一个自定义函数:Cstr CREATEFUNCTION[dbo].[Cstr](@ValueSQL_VARIANT)RETURNSNVARCHAR(MAX)ASBEGINRETURNISNULL(CAST(@ValueASNVARCHAR(MAX)),'')END
阅读全文
摘要:在维护一个网站,原开发者存储日期时,都是使用int数据类型,如20120218等。现Insus.NET获取这个字段做其它处理,得先需要把它们转为DateTime数据类型。因此产生以下这个User-Defined Functions(自定义函数):udf_ConvertIntDatetimeCREAT...
阅读全文