局部變量的定義與賦值
DECLARE @C1 CHAR(20),@C2 CHAR(10),@C3 CHAR(30)
SELECT @C1='SQL Server',@C2='2008'
SET @C3=@C1+@C2
SELECT @C3
DECLARE @C1 VARCHAR(20),@C2 VARCHAR(10),@C3 VARCHAR(30)
SELECT @C1='SQL Server',@C2='2008'
SET @C3=@C1+@C2
PRINT @C3
流程控制語句
BEGIN…END語句
語法
BEGIN
SQL語句1
SQL語句2
…
END
IF…ELSE語句
語法
IF 布爾表達式
SQL語句塊
[ELSE
SQL語句塊]
WHILE、BREAK和CONTINUE語句
語法
WHILE 布爾表達式
SQL語句塊
[BREAK]
SQL 語句塊
[CONTINUE]
系統函數
CASE函數
CASE
WHEN boolean_expression THEN result_expression
[…n]
[ELSE else_result_expression]
END
例
SELECT 學號, 姓名,
等級=
CASE
WHEN 總學分 IS NULL THEN '尚未選課'
WHEN 總學分 < 50 THEN '不及格'
WHEN 總學分 >=50 and 總學分<=52 THEN '合格'
ELSE '優秀'
END
FROM XS
WHERE 專業='計算機'
日期函數
DATENAME(Year,Date) /*返回字符串格式*/
DATEPART(Year,Date) /*返回數值格式*/
YEAR(Date)
例
SELECT DATEADD(year,1,'2004/7/16')
(3)字符串函數
(4)數學函數
注:查詢聯機叢書
用戶自定義函數
CREATE FUNCTION fn_stuName(@stuId char(9))
RETURNS char(20)
AS
BEGIN
DECLARE @Name char(20)
SET @Name=
(
SELECT Sname
FROM Student
WHERE Sno=@stuId
)
RETURN @Name
End
go
DECLARE @Name char(20)
EXEC @Name=dbo.fn_stuName @stuID='200215121'
PRINT @Name
示例1
/***************示例1***************/
USE Stu_Course
GO
/*檢查是否存在score表,若存在,則刪除*/
IF EXISTS
(SELECT * FROM sysobjects
WHERE name ='score')
DROP TABLE score
GO
/*創建score表*/
CREATE TABLE score
(
student_no int,
score int
)
/*檢查是否存在check_score觸發器,若存在,則刪除*/
IF EXISTS
(SELECT * FROM sysobjects
WHERE name ='check_score' AND type='TR')
DROP TRIGGER check_score
GO
/*在score表上創建check_score觸發器*/
CREATE TRIGGER check_score ON score
FOR INSERT,UPDATE
AS
DECLARE @score int
SELECT @score=score FROM inserted
IF @score<0 OR @score>100
BEGIN
ROLLBACK
RAISERROR('成績必須在0到100之間!',16,1)
END
GO
insert score VALUES(200401,120)
insert score VALUES(200401,100)
示例2
/***************示例2***************/
DROP TRIGGER check_score
GO
/*在score表上創建check_score觸發器,更新並顯示新老數據表*/
CREATE TRIGGER check_score ON score
FOR INSERT,UPDATE
AS
DECLARE @newscore int /*新數據變量*/
DECLARE @oldscore int /*老數據變量*/
SELECT * FROM inserted /*新數據顯示*/
SELECT * FROM deleted /*老數據顯示*/
SELECT @newscore=score FROM inserted /*新數據賦值*/
SELECT @oldscore=score FROM deleted /*老數據賦值*/
IF @newscore<0 OR @newscore>100
BEGIN
ROLLBACK
RAISERROR('成績必須在0到100之間!',16,1)
END
GO
update score
set score=120
where student_no=200401