国语自产精品视频在线看:您身边最放心的安全下载站! 最新软件|热门排行|软件分类|软件专题|厂商大全

国语自产精品视频在线看

技术教程
您的位置:首页数据库类SQL Server → SQL Server2012对于开发人员用的上的新特性

SQL Server2012对于开发人员用的上的新特性

我要评论 2013/04/01 18:40:36 来源:国语自产精品视频在线看 编辑:zbbingyang.com [ ] 评论:0 点击:277次

SQL Server 2012已经发【yǐ jīng fā】布一段😱时间了,最近在新的机🎁器上安装了最【zhuāng le zuì】新的SQL Server 2012 SP1,体检下感觉良【gǎn jiào liáng】好。官方给🙃出了一💉大堆【dà duī】SQL2012相对于SQL2008R2的新特【de xīn tè】性【xìng】,但是大【dàn shì dà】多数对【duō shù duì】📰于普通【yú pǔ tōng】🎛开发人💯员来说【yuán lái shuō】都是浮云,根本用不到,下面就🤜说说一👃些对于开发人💯员来说【yuán lái shuō】比较有【bǐ jiào yǒu】🈺用的新🈯特性【xìng】。

一、增加了Sequence对象:

这个对🦑于Oracle用户来说是最熟悉不🌺过的数据库对象了【xiàng le】🌇,现在在🛃SQL Server中终于【zhōng zhōng yú】🚫也看到🥌了类似【le lèi sì】👍的对象【de duì xiàng】,只是在使用的语法上有一点点不一【diǎn bú yī】🛶样【yàng】。创建语法也是【fǎ yě shì】CREATE SEQUENCE,使用的时候需【shí hòu xū】要使用NEXT VALUE FOR来取下一个值:

CREATE SEQUENCE [dbo].[SQ_1] AS [bigint] START WITH 1 INCREMENT BY 1; SELECT NEXT VALUE FOR [SQ_1] AS FirstUse;

如果要🥋插入一【chā rù yī】个值【gè zhí】,那么就是🈂:

INSERT INTO t1(c1,c2) VALUES (NEXT VALUE FOR SQ_1, 'Test') ;

但是好📟像没有提供获得当前🐈值的语法【fǎ】😻,难道必须取下【xū qǔ xià】一个值【yī gè zhí】?

二、新的分页查询语法:

以前在SQL Server中分页,最早是【zuì zǎo shì】用😉top或者临时表【shí biǎo】,后来出🔣现了【xiàn le】☕ROW_NUMBER函数实现分页,现在最【xiàn zài zuì】新的🥫SQL2012可以在order by子句后【zǐ jù hòu】跟offset和🗑fetch来分页,感觉有点像是【shì】LINQ的👚语法【yǔ fǎ】。比如查询1W行之后🔋的👚20条有效项目信【xiàng mù xìn】🤬息【xī】,那么📂ROW_NUMBER分页查询的【xún de】🔷SQL是【shì】:

select * from ( select *,ROW_NUMBER() over(order by p.PROJECT_ID) R from PROJECT p where p.IS_DELETED=0 ) x where x.R between 10001 and 10020

而是有【ér shì yǒu】了新的🚒语法,那么查【nà me chá】询语句就是📤:

SELECT * FROM PROJECT p where p.IS_DELETED=0 ORDER BY p.PROJECT_ID OFFSET 10001 ROWS FETCH NEXT 20 ROWS ONLY;

显然使用了新【yòng le xīn】的语法♈后代码🍲看起来更简洁🙄,意思表💉达也更明确。从执行【cóng zhí háng】效率上来讲【lái jiǎng】,试了一下【xià】,是一样【shì yī yàng】的🏝。

三、一些新的系统函数:

3.1相当于【xiàng dāng yú】C#中三目运算符🐍的IIF函数【hán shù】⏩

这个函【zhè gè hán】😻数和【shù hé】VBA中的👙IIF函数相同【tóng】,判断第一个参🚱数的表达式是【dá shì shì】否为真😒,真则返回第二【huí dì èr】个参数,假则返🔆回第三个参数。

有了这个函数很多时【hěn duō shí】🥛候我们可以不用再使【yòng zài shǐ】🤑用复杂🎙的case when语法了。比如我【bǐ rú wǒ】们判断项目的大小以显示对【xiǎn shì duì】应的字🚴符串【fú chuàn】👺,那么老的写法【de xiě fǎ】😜是:

select p.CODE,case when p.SIZE>100 then 'Big' else 'Small' end as SIZE_STRING from PROJECT p where SIZE is not null

现在,我们可【wǒ men kě】以简单🗓的写成【de xiě chéng】🖍:

select p.CODE,IIF(p.SIZE>100,'Big','Small') as SIZE_STRING from PROJECT p where SIZE is not null

3.2不用判断类型🔊和NULL的字符【de zì fú】串连接♏CONCAT函数【hán shù】

SQL Server本来对字符串【zì fú chuàn】的连接⛸很简单🌟,直接使【zhí jiē shǐ】🚴用“+”号,但是需要注意两个问【liǎng gè wèn】🔪题【tí】🏻,一是必须类型【xíng】🚕都是字🈴符串类型【xíng】🍈,如果是【rú guǒ shì】数字类【shù zì lèi】型【xíng】🍈那么会【nà me huì】报语🌻法错误,所以必【suǒ yǐ bì】须把数【xū bǎ shù】➰字类型【xíng】🍈转换为【zhuǎn huàn wéi】字符串【zì fú chuàn】。二是如果其中的某个🤦值为【zhí wéi】null,那么整个连接的结果【de jié guǒ】🍿就是一个null字符串【zì fú chuàn】,所以还【suǒ yǐ hái】需要判断null,所以本来只是💘一个连接字符串【zì fú chuàn】的查🧓询就会🖌写的很复杂:

select p.PROJECT_ID, p.CODE+','+p.NAME+','+ISNULL(p.NICK_NAME,'')+','+ISNULL(CONVERT(varchar(50),p.SIZE),'') from PROJECT p

现在使用【yòng】📟CONCAT函数【hán shù】🌂,直接忽略其中的类型,忽略对🚫NULL的检查,直接连【zhí jiē lián】接成一🌲个非空【gè fēi kōng】的字符串:

select p.PROJECT_ID,CONCAT( p.CODE,',',p.NAME,',',p.NICK_NAME,',',p.SIZE) from PROJECT p

可以明【kě yǐ míng】✒显感觉【xiǎn gǎn jiào】💭到简洁了很多。

3.3转换成字符串【zì fú chuàn】时设置【shí shè zhì】😐格式的FORMAT函数📣。

以前要【yǐ qián yào】把数字或者日🚓期转换【qī zhuǎn huàn】成字符串,可以使用CONVERT函数并带人第🍫三个整🕌数类型【shù lèi xíng】🛬的参数【de cān shù】指定转【zhǐ dìng zhuǎn】换的格【huàn de gé】式,不过这种方法🎵太麻烦【tài má fán】,整数参【zhěng shù cān】数不容易理解【yì lǐ jiě】🌍和记忆,而且也不灵活。现在的FORMAT函数相✉当于【dāng yú】🐶C#中的String.Format函数,在第二个参数🤰中可以【zhōng kě yǐ】🚘想要输➗出的格式。

select p.PROJECT_ID,FORMAT(p.CREATED_TIME,'yyyy-MM-dd'),CONVERT(varchar(50),p.CREATED_TIME,112) from PROJECT p

3.4让枚举显示更🉐方便的【fāng biàn de】CHOOSE函数【hán shù】👟。

在程序👶中经常【zhōng jīng cháng】使用⏹枚举值【méi jǔ zhí】🏾,在数据【zài shù jù】库中使🧠用⏹tinyint来保存【lái bǎo cún】枚举值【méi jǔ zhí】🏾,但是在查看【kàn】时🗼却不是【què bú shì】很容易理解枚🗯举值💋的含义【de hán yì】,必须查看代码【kàn dài mǎ】🌭看【kàn】1对应什么【me】,2对应什么【me】才知道【dào】🔋。在显示【zài xiǎn shì】的时候【de shí hòu】如果要显示成🔰字符串🍸,那么【me】就需要使【xū yào shǐ】📔用⏹case when进行判【jìn háng pàn】断【duàn】。现在可以使用⏹CHOOSE函数,让枚举转换成🏨字符串🍸变得很简单。比如要显示项📝目的状🌋态,那么【me】我们的查询就是:

select p.CODE,CHOOSE( p.STATUS,'Plan','Exec','Complete','Abort','Fail') from PROJECT p

CHOSSE函数比case when有几个缺点🐡,1是【shì】不支👂持【chí】0和负数Ⓜ,所以如果枚举的值【zhí】是【shì】🖖0那么就【nà me jiù】没办法【méi bàn fǎ】🤪显示,2是【shì】枚举值【zhí】🏜必须连【bì xū lián】续而🚅且比较小,不能使用【yòng】🥥100、200等值【zhí】🏜,那要是【shì】用【yòng】🙍CHOOSE那得写死人了🚚。没有【méi yǒu】default值【zhí】🏜,使用【yòng】🥥case when的时候,如果不匹配还有个【yǒu gè】else值【zhí】可以🐆显示,而使用【yòng】🥥CHOOSE后如果♏没有【méi yǒu】匹配的,那么就【nà me jiù】是【shì】NULL值【zhí】🏜。所以个人觉得【rén jiào dé】🗑这个函【zhè gè hán】📼数的使【shù de shǐ】用【yòng】🥥面非常

3.5各种日期时间函数。

除了一个【gè】EOMONTH函数是返回给【fǎn huí gěi】🥢定日期【dìng rì qī】的最后一天外【yī tiān wài】,其他的🤢新函数,都是把年月日作为参🀄数传进去,返回指定数据🏾类型的【lèi xíng de】🕖对象,相当于🧢就是CONVERT函数的变形【biàn xíng】。总体使用不多【yòng bú duō】,在此不🏌多介绍【duō jiè shào】⭐。

四【sì】、OVER子句的增强和新增一🥝些分析【xiē fèn xī】函数🧑:

之前【zhī qián】OVER子句是【zǐ jù shì】🚁用于🌏RANK,ROW_NUMBER等排名函数,现在【xiàn zài】OVER子句得到了大【dào le dà】大的增🥌强🦈, 可以将OVER子句应【zǐ jù yīng】用到聚【yòng dào jù】🏒合函数中,也增加🔐了一些分析函数。

比如我有一个【yǒu yī gè】项目😋和客户表📄,一个客【yī gè kè】户对于多个项🚺目😋,现在需要知道🕗客户的【kè hù de】信息和每个客户的【kè hù de】最🌋新项目【xīn xiàng mù】😋Code,这个要是以前📞还不好【hái bú hǎo】实现,现在我们有了📙分析函🍨数【shù】🍍,可以使用【yòng】🌴FIRST_VALUE或者LAST_VALUE再配合OVER子句【zǐ jù】,得到我【dé dào wǒ】们想要的结果【de jié guǒ】:

select distinct c.*,FIRST_VALUE(p.CODE) over(PARTITION BY c.CLIENT_ID order by p.[CREATED_TIME] desc) as LAST_PROJECT_CODE from PROJECT p inner join CLIENT c on p.CLIENT_ID=c.CLIENT_ID

关键词【guān jiàn cí】🧙:SQL

阅读本文后您有什么感想? 已有 人给出评价!

  • 0 欢迎喜欢
  • 0 白痴
  • 0 拜托
  • 0 哇
  • 0 加油
  • 0 鄙视