使用SQL SERVER需要注意的一些細節

2022-02-15 18:30:06 字數 2274 閱讀 2085

養成寫注釋的習慣。比如儲存過程,我們不僅在建立儲存過程的時候寫注釋,而且是以後的開發版本中修改了儲存過程,那麼也要寫注釋。

儲存過程不要以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...