常用函數:日期
DAY(date_expression ) --函數返回date_expression 中的日期值 select DAY(getdate())
MONTH(date_expression ) --函數返回date_expression 中的月份值 select month(getdate())
YEAR(date_expression ) --函數返回date_expression 中的年份值 select YEAR(getdate())
DATEADD(<datepart> ,<number> ,<date>) select DATEADD(yy,1,getdate())
--函數返回指定日期date 加上指定的額外日期間隔number 產生的新日期
GETDATE() --函數以DATETIME 的缺省格式返回系統當前的日期和時間
Datepart的含義及縮寫:
年份 yy、yyyy
季度 qq、q
月份 mm、m
每年的某一日 dy、y
日期 dd、d
星期 wk、ww
小時 hh
分鐘 mi、n
秒 ss、s
毫秒 ms
函數創建
CREATE FUNCTION CheckFnctn()
RETURNS int
AS
BEGIN
DECLARE @retval int
SELECT @retval = COUNT(*) FROM class
RETURN @retval
END;
刪除一個函數:
drop function dbo.CheckFnctn
函數修改
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER FUNCTION [dbo].[CheckFnctn]()
RETURNS int
AS
BEGIN
DECLARE @retval int
SELECT @retval = COUNT(*) FROM class
RETURN @retval
END;
函數使用
可以在增,刪,改查,視圖,觸發器,存儲過程,約束,等幾乎所有地方使用函數.
以下是在查詢語句中使用函數.
select dbo.CheckFnctn();
事物
一個完整的事務就是其中的每個操作要麼都完成,要麼都不做.回到事務開始前的狀態.
begin TRANSACTION ;
ALTER INDEX idx_class on class REBUILD;
select * from class;
commit TRANSACTION ;
需要注意的是,不同的數據庫,事務的開始,結束語法可能不一樣.例如:在informix中是:begin work和commit;
鎖
常見的情況是:分爲表鎖和行鎖
加鎖與解鎖.
排它鎖(獨佔鎖)與共享鎖.
鎖加在 SQL Server 資源上(如在一個事務中讀取或修改的行),以防止各種事務併發使用資源。例如,如果一個排它(X) 鎖被一個事務加在某一表的某一行上,在這個鎖被釋放前,其他事務都不可以修改這一行。
事物內加鎖
USE gaotest
GO
--此句的含義解釋起來較麻煩,請參考SQLSERVER的文檔.
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO
BEGIN TRANSACTION;
GO
select * from student with (rowlock) where id=1
waitfor delay '00:00:10'
GO
COMMIT TRANSACTION;
select * from student with (rowlock) where id=1
GO在另一個終端上運行:
update student set name='efgh' where id=1
運行結果顯示:兩次查詢的內容將會不同. 而更新語句會等到事務結束時,纔會得到提交.
update student set name=‘efgh’ where id=4:此條更新語句會立即得到執行,因爲被鎖的行不是id=4的記錄.
如果rowlock換成TABLOCK或 HOLDLOCK,則第二條語句也會等待. TABLOCKX:是排他鎖,其他鎖的類型還有,請參考SQLSERVER文檔