程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL Server2012在開辟中的一些新特征

SQL Server2012在開辟中的一些新特征

編輯:MSSQL

SQL Server2012在開辟中的一些新特征。本站提示廣大學習愛好者:(SQL Server2012在開辟中的一些新特征)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server2012在開辟中的一些新特征正文


1、增長了Sequence對象。
這個關於Oracle用戶來講是最熟習不外的數據庫對象了,如今在SQL Server中終究也看到了相似的對象,只是在應用的語法上有一點點紛歧樣。創立語法也是CREATE SEQUENCE,應用的時刻須要應用NEXT VALUE FOR來取下一個值:


CREATE SEQUENCE [dbo].[SQ_1]
 AS [bigint]
 START WITH 1
 INCREMENT BY 1;

SELECT NEXT VALUE FOR [SQ_1] AS FirstUse;

假如要拔出一個值,那末就是:


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

然則似乎沒有供給取得以後值的語法,豈非必需取下一個值?

2、新的分頁查詢語法。
之前在SQL Server平分頁,最早是用top或許暫時表,後來湧現了ROW_NUMBER函數完成分頁,如今最新的SQL2012可以在order by子句後跟offset和fetch來分頁,感到有點像是LINQ的語法。好比查詢1W行以後的20條有用項目信息,那末ROW_NUMBER分頁查詢的SQL是:


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而是有了新的語法,那末查詢語句就是:

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

明顯應用了新的語法子女碼看起來更簡練,意思表達也更明白。從履行效力下去講,試了一下,是一樣的。

3、一些新的體系函數。
3.1相當於C#中三目運算符的IIF函數

這個函數和VBA中的IIF函數雷同,斷定第一個參數的表達式能否為真,真則前往第二個參數,假則前往第三個參數。

有了這個函數許多時刻我們可以不消再應用龐雜的case when語法了。好比我們斷定項目標年夜小以顯示對應的字符串,那末老的寫法是:


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

如今,我們可以簡略的寫成:


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

3.2不消斷定類型和NULL的字符串聯接CONCAT函數

SQL Server原來對字符串的銜接很簡略,直接應用“+”號,然則須要留意兩個成績,一是必需類型都是字符串類型,假如是數字類型那末會報語法毛病,所以必需把數字類型轉換為字符串。二是假如個中的某個值為null,那末全部銜接的成果就是一個null字符串,所以還須要斷定null,所以原來只是一個銜接字符串的查詢就會寫的很龐雜:


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

如今應用CONCAT函數,直接疏忽個中的類型,疏忽對NULL的檢討,直接銜接成一個非空的字符串:

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

可以顯著感到到簡練了許多。

3.3轉換成字符串時設置格局的FORMAT函數。

之前要把數字或許日期轉換成字符串,可使用CONVERT函數並帶人第三個整數類型的參數指定轉換的格局,不外這類辦法太費事,整數參數不輕易懂得和記憶,並且也不靈巧。如今的FORMAT函數相當於C#中的String.Format函數,在第二個參數中可以想要輸入的格局。


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

3.4讓列舉顯示更便利的CHOOSE函數。

在法式中常常應用列舉值,在數據庫中應用tinyint來保留列舉值,然則在檢查時卻不是很輕易懂得列舉值的寄義,必需檢查代碼看1對應甚麼,2對應甚麼才曉得。在顯示的時刻假如要顯示成字符串,那末就須要應用case when停止斷定。如今可使用CHOOSE函數,讓列舉轉換成字符串變得很簡略。好比要顯示項目標狀況,那末我們的查詢就是:


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

CHOSSE函數比case when有幾個缺陷,1是不支撐0和正數,所以假如列舉的值是0那末就沒方法顯示,2是列舉值必需持續並且比擬小,不克不及應用100、200等值,那如果用CHOOSE那得寫逝世人了。沒有default值,應用case when的時刻,假如不婚配還有個else值可以顯示,而應用CHOOSE後假如沒有婚配的,那末就是NULL值。所以小我認為這個函數的應用面異常

3.5各類日期時光函數。

除一個EOMONTH函數是前往給定日期的最初一天外,其他的新函數,都是把年代日作為參數傳出來,前往指定命據類型的對象,相當於就是CONVERT函數的變形。整體應用不多,在此不多引見。

4、OVER子句的加強和新增一些剖析函數。
之前OVER子句是用於RANK,ROW_NUMBER等排名函數,如今OVER子句獲得了年夜年夜的加強, 可以將OVER子句運用到聚合函數中,也增長了一些剖析函數。

好比我有一個項目和客戶表,一個客戶關於多個項目,如今須要曉得客戶的信息和每一個客戶的最新項目Code,這個如果之前還欠好完成,如今我們有了剖析函數,可使用FIRST_VALUE或許LAST_VALUE再合營OVER子句,獲得我們想要的成果:


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved