局部变量的定义与赋值
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