濮阳杆衣贸易有限公司

主頁 > 知識庫 > SQL Server2012在開發(fā)中的一些新特性

SQL Server2012在開發(fā)中的一些新特性

熱門標(biāo)簽:電銷外呼系統(tǒng)軟件功能 慶陽地圖標(biāo)注 美團(tuán)地圖標(biāo)注商戶認(rèn)證注冊 怎么給高德做地圖標(biāo)注 咸陽電腦外呼系統(tǒng)運營商 北京400電話辦理多少錢 承德地圖標(biāo)注公司名需要花錢嗎 榕城市地圖標(biāo)注 浙江穩(wěn)定外呼系統(tǒng)供應(yīng)商

一、增加了Sequence對象。
這個對于Oracle用戶來說是最熟悉不過的數(shù)據(jù)庫對象了,現(xiàn)在在SQL Server中終于也看到了類似的對象,只是在使用的語法上有一點點不一樣。創(chuàng)建語法也是CREATE SEQUENCE,使用的時候需要使用NEXT VALUE FOR來取下一個值:

復(fù)制代碼 代碼如下:

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

SELECT NEXT VALUE FOR [SQ_1] AS FirstUse;

如果要插入一個值,那么就是:

復(fù)制代碼 代碼如下:

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

但是好像沒有提供獲得當(dāng)前值的語法,難道必須取下一個值?

二、新的分頁查詢語法。
以前在SQL Server中分頁,最早是用top或者臨時表,后來出現(xiàn)了ROW_NUMBER函數(shù)實現(xiàn)分頁,現(xiàn)在最新的SQL2012可以在order by子句后跟offset和fetch來分頁,感覺有點像是LINQ的語法。比如查詢1W行之后的20條有效項目信息,那么ROW_NUMBER分頁查詢的SQL是:

復(fù)制代碼 代碼如下:

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;

顯然使用了新的語法后代碼看起來更簡潔,意思表達(dá)也更明確。從執(zhí)行效率上來講,試了一下,是一樣的。

三、一些新的系統(tǒng)函數(shù)。
3.1相當(dāng)于C#中三目運算符的IIF函數(shù)

這個函數(shù)和VBA中的IIF函數(shù)相同,判斷第一個參數(shù)的表達(dá)式是否為真,真則返回第二個參數(shù),假則返回第三個參數(shù)。

有了這個函數(shù)很多時候我們可以不用再使用復(fù)雜的case when語法了。比如我們判斷項目的大小以顯示對應(yīng)的字符串,那么老的寫法是:

復(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

現(xiàn)在,我們可以簡單的寫成:

復(fù)制代碼 代碼如下:

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

3.2不用判斷類型和NULL的字符串連接CONCAT函數(shù)

SQL Server本來對字符串的連接很簡單,直接使用“+”號,但是需要注意兩個問題,一是必須類型都是字符串類型,如果是數(shù)字類型那么會報語法錯誤,所以必須把數(shù)字類型轉(zhuǎn)換為字符串。二是如果其中的某個值為null,那么整個連接的結(jié)果就是一個null字符串,所以還需要判斷null,所以本來只是一個連接字符串的查詢就會寫的很復(fù)雜:

復(fù)制代碼 代碼如下:

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

現(xiàn)在使用CONCAT函數(shù),直接忽略其中的類型,忽略對NULL的檢查,直接連接成一個非空的字符串:

復(fù)制代碼 代碼如下:

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

可以明顯感覺到簡潔了很多。

3.3轉(zhuǎn)換成字符串時設(shè)置格式的FORMAT函數(shù)。

以前要把數(shù)字或者日期轉(zhuǎn)換成字符串,可以使用CONVERT函數(shù)并帶人第三個整數(shù)類型的參數(shù)指定轉(zhuǎn)換的格式,不過這種方法太麻煩,整數(shù)參數(shù)不容易理解和記憶,而且也不靈活。現(xiàn)在的FORMAT函數(shù)相當(dāng)于C#中的String.Format函數(shù),在第二個參數(shù)中可以想要輸出的格式。

復(fù)制代碼 代碼如下:

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

3.4讓枚舉顯示更方便的CHOOSE函數(shù)。

在程序中經(jīng)常使用枚舉值,在數(shù)據(jù)庫中使用tinyint來保存枚舉值,但是在查看時卻不是很容易理解枚舉值的含義,必須查看代碼看1對應(yīng)什么,2對應(yīng)什么才知道。在顯示的時候如果要顯示成字符串,那么就需要使用case when進(jìn)行判斷?,F(xiàn)在可以使用CHOOSE函數(shù),讓枚舉轉(zhuǎn)換成字符串變得很簡單。比如要顯示項目的狀態(tài),那么我們的查詢就是:

復(fù)制代碼 代碼如下:

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

CHOSSE函數(shù)比case when有幾個缺點,1是不支持0和負(fù)數(shù),所以如果枚舉的值是0那么就沒辦法顯示,2是枚舉值必須連續(xù)而且比較小,不能使用100、200等值,那要是用CHOOSE那得寫死人了。沒有default值,使用case when的時候,如果不匹配還有個else值可以顯示,而使用CHOOSE后如果沒有匹配的,那么就是NULL值。所以個人覺得這個函數(shù)的使用面非常

3.5各種日期時間函數(shù)。

除了一個EOMONTH函數(shù)是返回給定日期的最后一天外,其他的新函數(shù),都是把年月日作為參數(shù)傳進(jìn)去,返回指定數(shù)據(jù)類型的對象,相當(dāng)于就是CONVERT函數(shù)的變形。總體使用不多,在此不多介紹。

四、OVER子句的增強(qiáng)和新增一些分析函數(shù)。
之前OVER子句是用于RANK,ROW_NUMBER等排名函數(shù),現(xiàn)在OVER子句得到了大大的增強(qiáng), 可以將OVER子句應(yīng)用到聚合函數(shù)中,也增加了一些分析函數(shù)。

比如我有一個項目和客戶表,一個客戶對于多個項目,現(xiàn)在需要知道客戶的信息和每個客戶的最新項目Code,這個要是以前還不好實現(xiàn),現(xiàn)在我們有了分析函數(shù),可以使用FIRST_VALUE或者LAST_VALUE再配合OVER子句,得到我們想要的結(jié)果:

復(fù)制代碼 代碼如下:

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

您可能感興趣的文章:
  • windows server2012無法連接無線網(wǎng)絡(luò)解決方法(windows無線連接)

標(biāo)簽:新鄉(xiāng) 貴州 拉薩 江蘇 重慶 昭通 呼和浩特 上海

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQL Server2012在開發(fā)中的一些新特性》,本文關(guān)鍵詞  SQL,Server2012,在,開發(fā),中的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQL Server2012在開發(fā)中的一些新特性》相關(guān)的同類信息!
  • 本頁收集關(guān)于SQL Server2012在開發(fā)中的一些新特性的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    汾西县| 洛隆县| 额济纳旗| SHOW| 安庆市| 桂东县| 嘉禾县| 象山县| 陵水| 阳东县| 汪清县| 新源县| 德州市| 高雄市| 临澧县| 定兴县| 霞浦县| 宜黄县| 博湖县| 新余市| 兴文县| 白沙| 西藏| 缙云县| 永新县| 马鞍山市| 宁都县| 文成县| 龙岩市| 虎林市| 荔波县| 甘南县| 台北市| 内江市| 北碚区| 明溪县| 紫云| 香格里拉县| 册亨县| 星座| 大同县|