目前分類:T-SQL (5)

瀏覽方式: 標題列表 簡短摘要
-- ROW_NUMBER()
-- 依照指定的欄位「排序」,逐筆加上序號,例:
-- SerialNo  Field_Name
-- 1         ab
-- 2         ab
-- 3         cd
-- 4         ef
SELECT ROW_NUMBER() OVER( ORDER BY [Field_Name]) AS SerialNo, *
FROM [Table_Name]

-- RANK()
-- 依照指定的欄位「排名」,遇到不同資料時將以「該筆序號」為新排名,例:
-- SerialNo  Field_Name
-- 1         ab
-- 1         ab
-- 3         cd
-- 4         ef
SELECT RANK() OVER( ORDER BY [Field_Name]) AS SerialNo, *
FROM [Table_Name]

-- DENSE_RANK()
-- 依照指定的欄位「排名」,遇到不同資料時將以「下一排名」為新排名,例:
-- SerialNo  Field_Name
-- 1         ab
-- 1         ab
-- 2         cd
-- 3         ef
SELECT DENSE_RANK() OVER( ORDER BY [Field_Name]) AS SerialNo, *
FROM [Table_Name]

文章標籤

Aixo 發表在 痞客邦 留言(0) 人氣()

-- 修改 Table 欄位名稱,自行修改前 2 個 '' 中的資料,最後的 'COLUMN' 保留不變
EXEC sp_rename 'Table_Name.Old_Column_Name', 'New_Column_Name', 'COLUMN'

-- 修改 Table 名稱
EXEC sp_rename 'Old_Table_Name' , 'New_Table_Name'
文章標籤

Aixo 發表在 痞客邦 留言(0) 人氣()

Transaction(交易,大陸譯名:事务)

將多個資料庫操作的 SQL 指令 group 成一個執行的單元區塊( a single execution unit ),以特定的字串( Begin Transaction )來標記交易開始,一個交易可能包括了多個資料庫操作指令來完成,交易結束時的動作有兩個,若所有的操作全部執行成功,交易才算成功並提交變更( Commit Transaction ),若當中有發生錯誤失敗,則整個交易宣告失敗並回復所有變更( Rollback Transaction )。

例:

DECLARE @chk tinyint
SET @chk = 0
Begin Transaction [Trans_Name] -- Trans_Name 交易名稱可自訂或者是不寫
    
    -- 可編寫多個 SQL 指令
    INSERT INTO [Table_Name] VALUES( 'Field_Value_1' );
    IF @@Error <> 0 BEGIN SET @chk = 1 END

    INSERT INTO [Table_Name] VALUES( 'Field_Value_2' );
    IF @@Error <> 0 BEGIN SET @chk = 1 END

IF @chk <> 0 BEGIN -- 若是新增資料發生錯誤
    Rollback Transaction [Trans_Name] -- 復原所有操作所造成的變更
END
ELSE BEGIN
    Commit Transaction [Trans_Name] -- 提交所有操作所造成的變更
END

 

參考資料:
http://www.codeproject.com/Articles/4451/SQL-Server-Transactions-and-Error-Handling

 

文章標籤

Aixo 發表在 痞客邦 留言(0) 人氣()

@@Error  回傳最近一次 SQL 執行結果的錯誤代碼,若成功執行,則回傳 0
Returns the error number for the last Transact-SQL statement executed.
Returns 0 if the previous Transact-SQL statement encountered no errors.

@@RowCount  回傳最近一次 SQL 執行結果影響的資料列筆數
Returns the number of rows affected by the last statement.

文章標籤

Aixo 發表在 痞客邦 留言(0) 人氣()

 -- 判斷 Table 是否存在

IF EXISTS( SELECT * FROM sys.tables WHERE name = 'Table_Name' )
    SELECT * FROM [Table_Name]

-- 暫存表,# 表示本地暫存,## 表示全局暫存

IF OBJECT_ID('tempdb.dbo.#Table_Name') IS NOT NULL
    DROP TABLE [#Table_Name]

文章標籤

Aixo 發表在 痞客邦 留言(0) 人氣()