[SQL]SQL Server 2012 – What’s new in T-SQL (SQL 152)

  • 3362
  • 0
  • SQL
  • 2012-08-08

SQL Server 2012 – What’s new in T-SQL (SQL 152)

開始練習Lab時,請先參考「使用SQL Server Virtual Labs注意的地方」。

活動:SQL SERVER 好文比賽

主題:SQL Server 2012 – What’s new in T-SQL (SQL 152)

SQL Server 2012 T-SQL有那些新的東西呢? 以下跟著Lab(SQL Server 2012 – What’s new in T-SQL (SQL 152) )來體驗看看吧!

Exercise 1:  Sequences

 

PS.開啟Lab中的Script檔時,請將 Adventureworks Replace成 Adventureworks2012 (因Lab的VM的DB是Adventureworks2012)。

 

--Create the Test schema 
CREATE SCHEMA Test;

-- 建立一個 SEQUENCE 從1開始,每次遞增1
CREATE SEQUENCE Test.CountBy1     
    START WITH 1     
    INCREMENT BY 1;

-- 透過NEXT VALUE來取下一個流水號
SELECT NEXT VALUE FOR Test.CountBy1;

 

 

 

SEQUENCE 也可以用在不同的Table中的欄位當預設值,如下

CREATE SCHEMA Audit;  
CREATE SEQUENCE Audit.EventCounter
     AS int     
     START WITH 1     
     INCREMENT BY 1;
     
CREATE TABLE Audit.ProcessEvents 
(     
    EventID int PRIMARY KEY CLUSTERED DEFAULT (NEXT VALUE FOR Audit.EventCounter)
,     EventTime datetime NOT NULL DEFAULT (getdate())
,     EventCode nvarchar(5) NOT NULL
,     Description nvarchar(300) NULL 
) ; 

 

 

 

也可以設定到了最大值時,就重新從最小值開始一直重覆,如下,

CREATE SEQUENCE CountBy5    
    AS tinyint     
    START WITH 1     
    INCREMENT BY 1     
    MINVALUE 1     
    MAXVALUE 5     
    CYCLE;  

SELECT NEXT VALUE FOR CountBy5

SELECT NEXT VALUE FOR CountBy5 AS SurveyGroup, Name 
FROM sys.objects;

 

 

image

 

可以依某個排序來遞增流水號NEXT VALUE FOR Samples.IDLabel OVER (ORDER BY Name)

image

 

可透過 ALTER SEQUENCE 重新設定初始值

image

 

Lab VM 最後是將原本欄位是Identity 改成使用 SEQUENCE,透過新增欄位及刪除舊欄位及改欄位名稱。

 

Exercise 2: PAGING windows in T-SQL

之前要做到取資料的分頁需要透過ROW_NUMBER() + ORDER BY + BETWEEN 來取得資料中第N頁的資料,SQL 2000時,還更麻煩!

現在有了OFFSET/FETCH NEXT + ORDER BY  要將資料分頁取資料語法就更簡單了。

image

 

Exercise 3: Exception Handling in SQL Server 2012

SQL 2012中可透過TRY/CATCH來Handle錯誤。

image

 

Exercise 4: New Functions in SQL Server 2012

Task 1: String Manipulation using CONCAT

CONCAT可將要串接的資料串成字串輸出

image

 

Task 2: FORMAT function

image

 

Task 3: Logical functions IIF and CHOOSE

SELECT CHOOSE ( 3, 'Manager', 'Director', 'Developer', 'Tester' ) AS Result; --Developer

DECLARE @a int = 45; DECLARE @b int = 40; SELECT IIF ( @a > @b, 'TRUE', 'FALSE' ) AS Result; --TRUE

 

 

 

Task 4: TRY_CONVERT function in SQL Server 2012

如果轉換成功,會傳回轉換為指定之資料類型的值;否則會傳回 Null。所以有時我們在做資料轉入時,可透過這種方式來找出那些資料無法轉入。

SELECT  CASE WHEN TRY_CONVERT(float, 'test') IS NULL 
    THEN 'Cast failed'
    ELSE 'Cast succeeded'
END AS Result; -- Cast failed

 

 

 

另外,Lead/Lag 對於在前後期比較也很有幫助哦!

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^