養成寫注釋的習慣。比如儲存過程,我們不僅在建立儲存過程的時候寫注釋,而且是以後的開發版本中修改了儲存過程,那麼也要寫注釋。
儲存過程不要以sp_開頭,因為系統儲存過程都是以sp_開頭的。
而且在執行sp_開關的儲存過程時資料庫引擎首先在master資料庫中查詢這個儲存過程,如果找不到,再去其它資料庫查詢。
-- 建立乙個sp_開頭的儲存過程
if object_id('[dbo].[sp_executesql]') is not null
drop procedure [dbo].[sp_executesql];
create proc [dbo].[sp_executesql]
asselect 1 as [id];
go -- 這樣呼叫的其實是系統儲存過程(sys架構下)
exec [dbo].[sp_executesql];
儲存過程內部盡量用靜態語句書寫,避免用字串拼湊執行,避免不了時可能用sp_executesql。
-- 拼湊字串形式的語句,執行計畫不會重用
declare @s varchar(500);
set @s = '
select * from dbo.t_product where productid = '
+ ltrim(@product_id);
exec(@s);
-- 使用動態引數批的sp_executesql,執行計畫可以重用
declare @s nvarchar(500);
declare @parameters nvarchar(200);
set @parameters = n'@p_product_id int';
set @s = '
select * from test.dbo.t_product where productid = @p_product_id';
exec sp_executesql @s,@parameters,@p_product_id = @product_id;
每乙個t-sql語句的編寫要以分號結束。
據說在以後的資料庫版本裡面會強制要求。現在的版本,在公用表過式的編寫中,就有這個限制。
-- 語句沒有以分號結束
select * from dbo.t_product where productid = 23
-- 公用表示式前面的語句必須以分號結束
with cte as
(select * from dbo.t_product
where productid < 10
)select * from cte;
引用物件時帶上架構名。
這也是比較推薦的寫法。
預設的架構名為dbo 架構是為了便於管理資料庫物件(比如表、索引、函式、儲存過程、檢視)的乙個容器。架構可以理解為資料夾、貨架。
-- 訪問物件用架構名.資料物件名稱
select count(1) from dbo.t_product;
-- dbo是預設的架構,訪問表時會自動訪問dbo架構裡的表
select count(1) from t_product;
-- 呼叫自定義函式(標量值),必須帶架構名
select uf_num('100pcs');
select dbo.uf_num('100pcs');
-- 建立物化檢視
create view [dbo].[v_test] with schemabinding
as -- 訪問的物件必須加架構
select productid,code from t_product where productid < 100;
--select productid,code from dbo.t_product where productid < 100;
推薦安裝sqlprompt第三方工具。
一可以節省編寫語句的時間。二可以統一和規範語句編寫。以下三種寫法,我們認為是完全一樣的,但資料庫查詢優化器認為是不同的。
select count(1) from dbo.t_product where productid = 1;
select count(1) from dbo.t_product where productid = 1;
select count(1) from dbo.t_product where productid = 1;
sql server中使用組合索引需要注意的地方
一 使用組合索引需要注意的地方 1 索引應該建在選擇性高的字段上 鍵值唯一的記錄數 總記錄條數 選擇性越高索引的效果越好 價值越大,唯一索引的選擇性最高 2 組合索引中字段的順序,選擇性越高的字段排在最前面 如果把低選擇性的列放在最左端,可能會造成無法使用該索引的情況。3 where條件中包含兩個選...
關於sql server建立索引需要注意的問題
人們在使用sql時往往會陷入乙個誤區,即太關注於所得的結果是否正確,而忽略了不同的實現方法之間可能存在的效能差異,這種效能差異在大型的或是複雜的資料庫環境中 如聯機事務處理oltp或決策支援系統dss 中表現得尤為明顯。筆者在工作實踐中發現,不良的sql往往來自於不恰當的索引設計 不充份的連線條件和...
使用Calendar需要注意clear
date是前台傳的值,格式為2014 01 01的形式 如下的 是去date日期當月的最大天數日期 int month integer.parseint date.substring 5,7 取天數 int year integer.parseint date.substring 0,4 取年份 d...