背景
一個項目的開發(fā),離不開數據庫的相關操作,表/視圖設計,存儲過程,觸發(fā)器等等數據庫對象的操作是非常頻繁的。有時候,我們會查找系統(tǒng)中類似的代碼,然后復制/粘貼進行再進行相應的修改。本文的目的在于歸納、總結sqlserver數據庫的常用操作,并不斷更新。期以備忘!
P1 sql的執(zhí)行順序
sql語句是操作數據庫的工具,了解sql的執(zhí)行順序會極大地幫助我們提高我們編寫的sql的執(zhí)行效率。見以下代碼:
(8)SELECT (9)DISTINCT (11)<Top Num> <select list>
(1)FROM [left_table]
(3)<join_type> JOIN <right_table>
(2)ON <join_condition>
(4)WHERE <where_condition>
(5)GROUP BY <group_by_list>
(6)WITH <CUBE | RollUP>
(7)HAVING <having_condition>
(10)ORDER BY <order_by_list>
FROM:對FROM子句中的前兩個表執(zhí)行笛卡爾積(Cartesian product)(交叉聯(lián)接),生成虛擬表VT1
ON:對VT1應用ON篩選器。只有那些使<join_condition>為真的行才被插入VT2.
OUTER(JOIN):如 果指定了OUTER JOIN(相對于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部聯(lián)接把左表標記為保留表,右外部聯(lián)接把右表標記為保留表,完全外部聯(lián)接把兩個表都標記為保留表)中未找到匹配的行將作為外部行添加到 VT2,生成VT3.如果FROM子句包含兩個以上的表,則對上一個聯(lián)接生成的結果表和下一個表重復執(zhí)行步驟1到步驟3,直到處理完所有的表為止。
WHERE:對VT3應用WHERE篩選器。只有使<where_condition>為true的行才被插入VT4.
GROUP BY:按GROUP BY子句中的列列表對VT4中的行分組,生成VT5.
CUBE|ROLLUP:把超組(Suppergroups)插入VT5,生成VT6.
HAVING:對VT6應用HAVING篩選器。只有使<having_condition>為true的組才會被插入VT7.
SELECT:處理SELECT列表,產生VT8.
DISTINCT:將重復的行從VT8中移除,產生VT9.
ORDER BY:將VT9中的行按ORDER BY 子句中的列列表排序,生成游標(VC10)。
TOP:從VC10的開始處選擇指定數量或比例的行,生成表VT11,并返回調用者。
總的來說,select的列是最后一步被執(zhí)行的,而From的Table是首先被執(zhí)行的。
P2 創(chuàng)建帶Try…Catch的存儲過程模板
Copy下面的代碼,然后新建查詢,就可以寫sql語句,執(zhí)行完后,一個你自己的存儲過程就建立好了!
USE [DB]--設定對應的數據庫
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- AUTHOR:
-- DESCRIBE:
-- =============================================
CREATE PROCEDURE [dbo].[UP_InsertJHBData] --存儲過程名
(
@CustomerName VARCHAR(50) --參數
)
AS
BEGIN
SET NOCOUNT ON --提高性能的,必須要有
DECLARE @Now DATETIME
SET @Now = GETDATE() --所有操作保證統(tǒng)一時間
新聞熱點
疑難解答