《SQL Server 二〇〇八从入门到通晓》–20180710

发布时间:2019-03-08  栏目:MySQL  评论:0 Comments

目录

约束

主关键字约束(Primary Key Constraint)

用来钦命表中的一列或几列组合的值在表中有着唯一性。建立主键的目标是让外键来引用。

1.应用Transact-SQL语言编制程序

即使SQL Server
二零零六提供了图形化界面,但只有一种Transact-SQL语言能够直接与数据库引擎实行相互。依照实施效率特色可以将Transact-SQL语言分成3大类:数据定义语言DDL,数据操纵语言DML,数据控制语言DCL。

Primary Key的成立格局

在开创表时成立Primary Key

CREATE TABLE table1(
    t_id VARCHAR(12) ,
    t_name VARCHAR(20),
    t_phone VARCHAR(20),
    CONSTRAINT t_idss PRIMARY KEY(t_id)
);

对t_id列创建主键,约束名为t_idss。

1.1.数量定义语言DDL

是最基础的Transact-SQL语言类型,用来创制数据库和创设,修改,删除数据库中的各个对象,为其余语言的操作提供对象。例如数据库,表,触发器,存款和储蓄进程,视图,函数,索引,类型及用户等都以数据库中的对象。常见的DDL语句包含

CREATE TABLE--创建表
DROP TABLE--删除表
ALTER TABLE--修改表
删除Primary Key
ALTER TABLE table1
DROP CONSTRAINT t_idss;

封锁名与列名不等同,此处填写约束名

1.2.数码操纵语言DML

是用来操纵表和视图中的数据的语句,例如查询数据(SELECT),插入数据(INSERT),更新数据(UPDATE)和删除数据(DELETE)等。

向已有表中添加Primary Key
ALTER TABLE table1
ADD CONSTRAINT t_idss
PRIMARY KEY(t_id);

1.3.数码控制语言DCL

事关到权力管理的语言称为数据控制语言,紧要用来实施有关安全治本的操作。如授予权限(GRANT),收回权限(REVOKE),拒绝授予主体权限,并防止主体通过组或剧中人物成员持续权限(DENY

丰裕Primary Key的另一种示例
ALTER TABLE Products
ADD PRIMARY KEY(prod_id);

尽管上述代码运行没难点,查看表格设计也能够看看Primary
Key设置成功,不过在剔除Primary Key操作时会提醒:
消息3728,级别16,状态1,第1 行
‘prod_id’ 不是约束。
消息3727,级别16,状态0,第1 行
决不能删除约束。请参阅前边的错误新闻。
由来是加上Primary
Key语句中从不用CONSTRAINT指明约束名,系统自动生成了主键名和约束名,要先查看主键名和平条约束名,删除时填写的也是约束名。
那种场馆包车型客车正确删除方法

ALTER TABLE Products
DROP CONSTRAINT CK__Products__prod_p__1A14E395;
ALTER TABLE Products
DROP CONSTRAINT PK__Products__56958AB222AA2996;

1.4.Transact-SQL言语功底

多列组合添加主键约束
CREATE TABLE table1(
    t_id VARCHAR(12),
    s_id VARCHAR(20),
    score FLOAT,
    CONSTRAINT ts_id PRIMARY KEY(t_id,s_id)
);

1.4.1.常量与变量

常量不多说。在SQL Server
2010中,存在三种变量。一种是系统定义和爱慕的全局变量,一种是用户定义用来保存中间结果的有个别变量。

外关键字约束(Foreign Key Constraint)

概念了表之间的涉嫌,用来珍重八个表之间的一致性的涉及。
在创设表时创办Foreign Key Constraint

CREATE TABLE table2(
    s_id VARCHAR(20),
    s_name VARCHAR(12),
    s_tellphone VARCHAR(11),
    s_address VARCHAR(20),
    CONSTRAINT PK_s_id PRIMARY KEY(s_id),
);--首先新建table2,设置s_id为主键

CREATE TABLE table1(
    t_id VARCHAR(12),
    s_id VARCHAR(20),
    score FLOAT,
    CONSTRAINT pk_ts_id PRIMARY KEY(t_id,s_id),--新建table1,对t_id和s_id设置联合主键,键名pk_ts_id
    CONSTRAINT fk_s_id FOREIGN KEY(s_id)--对s_id设置外键fk_s_id
    REFERENCES table2(s_id)--外键fk_s_id外键关联table2的列s_id
    ON DELETE CASCADE--设置在table1的s_id删除时table2的s_id同时删除
    ON UPDATE CASCADE--设置在table1的s_id更新时table2的s_id同时更新
);

注:对table1设置外键关联table2,在插入数据时须求先插入table2的多寡,才能得逞插入table1的多寡。更改table2.s_id数据,table1.s_id数据也会自动改变。可是更改table1.s_id数据,执行时报外键争持。不问可见对table1设置外键关联table2后,table1的数额跟着table2走,无法反着来。

累加和删除外键约束同主键。

1.4.1.1.体系全局变量

系统全局变量分为两大类,一类是与自然SQL
Server连接或与日前处理有关的全局变量,如@@Rowcount意味着如今贰个口舌影响的行数。@@error意味着保留近来举办操作的错误状态。一类是与总体SQL
Server系统有关的全局变量,如@@Version代表近来SQL Server的版本新闻。

SELECT @@VERSION AS 当前版本;--查看当前SQL Server的版本信息

结果如图所示
图片 1

UNIQUE约束

除主键外另一种能够定义唯一约束的连串,允许空值。添加UNIQUE的法子同上,那里只不难举例。

USE test
GO
ALTER TABLE table2
ADD CONSTRAINT uk_s_tellphone
UNIQUE(s_tellphone);
1.4.1.2.局部变量

局地变量能够享有一定数据类型,有必然的作用域,一般用于充当计数器计算或控制循环执行次数,恐怕用于保存数据值。局地变量前唯有二个@符,用DECLARE语句注脚局地变量。

USE test
DECLARE @StudentId varchar(20)
SET @StudentId=(
SELECT Student.stu_no
FROM Student
WHERE stu_enter_score='603')
SELECT @StudentId AS 入学分数为603的学生学号
GO

结果如图所示
图片 2

CHECK约束

分为表约束和列约束,用于限制字段值在某些范围。

2.运算符

添加CHECK约束
ALTER TABLE table2
ADD sex CHAR(2);--在table表中添加sex,数据类型为CHAR,用来存放性别
GO
ALTER TABLE table2
ADD CONSTRAINT ck_sex CHECK(sex in('男','女'));

注:此时sex列数据类型不可能是bit,要是填写bit,只可以存储0和1,用CHECK约束限制结果为男和女就会报错。

2.1.算数运算符

在SQL Server
二零一零中,算数运算包涵加(+)减(-)乘(*)除(/)取模(%)。举二个简约的例证。
示例1:在Student表中添加一列,列名为stu_age,根据Student表的stu_birthday列计算stu_age列并插入数据。(演示插入整列数据的艺术)
Student表数据如图所示
图片 3
施行下边包车型客车话语

ALTER TABLE Student
ADD stu_age int;--在Student表中添加stu_age列
CREATE TABLE #agetemp(stu_no varchar(8),age int);--新建一个临时表
INSERT INTO #agetemp(stu_no,age)--在临时表中插入学号和计算出来的年龄
SELECT Student.stu_no,YEAR(GETDATE())-YEAR(stu_birthday)--利用函数和运算符计算年龄
FROM Student;
UPDATE Student
SET Student.stu_age=#agetemp.age--将临时表中的age列数据整个复制到Student表的stu_age列
FROM #agetemp
WHERE Student.stu_no=#agetemp.stu_no--条件是两个表的stu_no列值相等
GO
SELECT * FROM Student

结果如图所示
图片 4

在创立表的时候添加CHECK 约束
CREATE TABLE table3(
    t3_id VARCHAR(12),
    t3_name VARCHAR(20),
    t3_class VARCHAR(12),
    t3_type VARCHAR(12),
    CONSTRAINT ck_t3_type CHECK(t3_type in('类型1','类型2','类型3')) 
)

添加了约束后假诺插入不切合约束的多少

INSERT INTO table3(
    t3_id,
    t3_name,
    t3_class,
    t3_type
)VALUES(
'2018038219',
'李建',
'社会与科学',
'任何数据'
);

消息547,级别16,状态0,第1 行
INSERT 语句与CHECK
约束”ck_t3_type”争辩。该抵触产生于数据库”test”,表”dbo.table3″, column
‘t3_type’。

讲话已告一段落。

2.2.赋值运算符

即等号(=),将表明式的值赋予另三个变量。举二个简单易行的事例。
示例2:总计Student表中学生的平分入学成绩并打字与印刷。
Student表的数量如图所示,stu_enter_score列存放了学生的入学成绩
图片 5
施行下边包车型客车语句

DECLARE @average int--声明@average变量
SET @average=(--将计算出的平均值赋值给@average
SELECT AVG(stu_enter_score)
FROM Student)
PRINT @average--打印@average的值

结果如图所示
图片 6

删除CHECK约束
ALTER TABLE table3
DROP CONSTRAINT ck_t3_type;

2.3.位运算符

位运算符包含与运算(&),或运算(|)和异或运算(^),能够对多个表明式举行位操作,那八个表达式能够是整型数据或二进制数据。Transact-SQL首先把整型数据转换为二进制数据,然后按位运算。举个简单的例子。
示例3:表明3个int型变量@num1,@num2,对这七个赋值且做与或异或运算。
履行上面包车型地铁讲话

DECLARE @num1 int,@num2 int
SET @num1=5 
SET @num2=6
SELECT @num1&@num2 AS 与,
@num1|@num2 AS 或,
@num1^@num2 AS 异或

结果如图所示
图片 7
推而广之示例4:写八个十进制转换为二进制的函数

CREATE FUNCTION Bin_con_dec(@dec int)--定义十进制转换为二进制函数
RETURNS varchar(20)
AS
BEGIN
DECLARE @quo int,@remainder varchar(20),@quo1 int
SET @quo=@dec
SET @remainder=''
WHILE @quo<>0
BEGIN
SET @quo1=@quo/2
SET @remainder=CAST(@quo%2 AS varchar(20))+@remainder
SET @quo=@quo1
END
RETURN @remainder
END

执行上边包车型客车函数后,运转下列语句验证函数正确性

PRINT dbo.Bin_con_dec(42)

结果为101010,函数定义正确。

DEFAULT约束

由此定义列的暗中同意值或行使数据库的暗中同意值对象绑定表列,来钦点列的暗中同意值。

2.4.比较运算符

也称关系运算符,用于相比三个值的涉及,常见的有等于(=),大于(>),小于(<),大于等于(>=),小于等于(<=),不等于(<>或!=)
示例5:从Student表中询问入学战表在平均分以上的学生新闻
Student表的数目如图所示
图片 8
履行下列语句

DECLARE @ave int
SET @ave=(SELECT AVG(stu_enter_score) FROM Student)
SELECT *FROM Student
WHERE stu_enter_score>=@ave;

结果如下图所示
图片 9

注:不可能平素把代码写成下边包车型地铁花样

SELECT * FROM Student
WHERE stu_enter_score>=AVG(stu_enter_score)

消息147,级别15,状态1,第2 行
聚集不应出现在WHERE 子句中,除非该聚合位于HAVING
子句或选择列表所富含的子查询中,并且要对其展开联谊的列是外部引用。

因为AVG是聚合函数。

在建表时添加DEFAULT约束
CREATE TABLE table3(
    t3_id VARCHAR(12),
    t3_name VARCHAR(20),
    t3_class VARCHAR(12),
    t3_type VARCHAR(12) DEFAULT '类型1' 
)

2.5.逻辑运算符

逻辑运算符的效果是对规范实行测试。ALL,AND,ANY,BETWEEN,EXISTS,IN,LIKE,NOT,ALL,SOME。下边用SOME来比喻。SOME的效益是要是在一组相比中,有个别为true那就为true。
示例6:查询Student表中是不是留存入学成绩当先平均分的上学的小孩子,借使存在,输出true,不设有输出false。
Student表的stu_enter_score列(入学成绩)数据如图所示
图片 10
履行下边的讲话

USE test
IF (SELECT AVG(stu_enter_score) FROM Student)<=SOME(SELECT stu_enter_score FROM Student)
PRINT 'true'
ELSE
PRINT 'false'
GO

结果如图所示
图片 11

删除DEFAULT约束
ALTER TABLE table3
DROP CONSTRAINT DF__table3__t3_type__3D5E1FD2;
--DF__table3__t3_type__3D5E1FD2是DEFAULT约束的约束名

2.6.连接运算符

加号(+)是字符串连接运算符,能够用它把字符串串连起来,在示例4的十进制转二进制函数中,就用上了加号。
示例7:将Student表的stu_name列和stu_enter_score列放在同样列彰显,列名为score
Student表的数目如图所示
图片 12
执行下列语句

SELECT stu_name+CAST(stu_enter_score AS VARCHAR(3)) AS score FROM Student

施行结果如图所示
图片 13

注:stu_enter_score列数据类型为int,加号只对字符串类型数据有效,由此要用CAST函数将stu_enter_score的数据类型转换为varchar(3),那样才能得以实现字符串拼接。

加上封锁不钦赐约束名
ALTER TABLE table3
ADD DEFAULT '类型2' FOR t3_type;
GO

2.7.一元运算符

一元运算符只对八个表明式执行操作,该表达式能够是数字数据类型中的任何一种数据类型。SQL
Server 二〇一〇提供的一元运算符包罗正(+),负(-),位反(~)。
示例8:声明一(Wissu)个int数据类型变量@num并赋值,对该变量做正负位反操作。
进行下列语句

DECLARE @num INT
SET @num=45
SELECT +@num AS 正,-@num AS 负,~@num AS 位反
GO

结果如图所示
图片 14

注:位反操作符用于取一个数的补数,只好用来整数。

累加封锁内定约束名
ALTER TABLE table3
ADD CONSTRAINT df_t3_type
DEFAULT '类型2' FOR t3_type;
GO

2.8.运算符的预先级

优先级 运算符
1 ~(位反)
2 *(乘),/(除),%(取模)
3 +(正),-(负),+(加),+(连接),-(减),&(位与)
4 =,>,<,>=,<=,<>,!=,!>,!<(比较运算符)
5 ^(位异或),位或(符号打不出来,前面有,自己翻)
6 NOT
7 AND
8 ALL,ANY,BETWEEN,IN,LIKE,ALL,SOME
9 =(赋值)

当说明式中的运算符有相同的优先级时,遵照它们在表明式中的地方,一元运算符按从右往左运算,二元运算符(对五个表明式功效的运算符)按从左往右运算。
示例9:验证运算符优先级
实施下列语句

DECLARE @result INT,@num INT
SET @num=45
SET @result=@num+(~@num)*4-@num/(~@num)
SELECT @result AS result
GO

结果如图所示
图片 15
计量代码中的表明式
@result=@num+(~@num)4-@num/(~@num)
=@num+(-46)
4-@num/(-46)
=45+(-46)4-45/(-46)
=45+(-46)
4
=-139

NOT NULL约束

自律字段值不为空。

3.控制语句

建表时设置NOT NULL约束
CREATE TABLE table3(
    t3_id VARCHAR(12) NOT NULL,
    t3_name VARCHAR(20) NOT NULL,
    t3_class VARCHAR(12) NOT NULL,
    t3_type VARCHAR(12) NOT NULL 
)

3.1.BEGIN END语句块

BEGIN END能够定义SQL
Server语句块,使那几个讲话作为一组语句执行,允许语句嵌套。举例请见示例4

为已存在的列添加NOT NULL约束
ALTER TABLE table3
ALTER COLUMN t3_type VARCHAR(12) NOT NULL;

3.2.IF ELSE语句块

用以钦赐T-SQL语句的施行标准,若条件为真,则执行尺度表达式后边的讲话,条件为假时,能够试用ELSE关键字钦命要举行的T-SQL语句。举例请见示例4

删除NOT NULL约束
ALTER TABLE table3
ALTER COLUMN t3_type VARCHAR(12) NULL;
GO

3.3.CASE分支语句

示例10:将Student表的学习者,性别和原籍打字与印刷出来,需求籍贯只可以呈现省外,外省或自治区。
Student表的数目如图所示
图片 16
履行下列语句

SELECT stu_name AS 姓名,stu_sex AS 性别,
(CASE stu_native_place
WHEN '浙江' THEN '省内'
WHEN '内蒙古' THEN '自治区'
WHEN '西藏' THEN '自治区'
WHEN '宁夏' THEN '自治区'
WHEN '新疆' THEN '自治区'
WHEN '广西' THEN '自治区'
ELSE '省外'
END) AS 籍贯 
FROM Student

结果如图所示
图片 17

自定义暗中认可值对象保证数据完整性

CREATE DEFAULT date_today AS GETDATE();
--新建默认值对象名date_today,默认值为getdate()函数,获取当前日期
GO
EXEC sp_addtype date_time,'date','NULL';
--利用存储过程新建自定义数据类型date_time,参照系统数据类型date
GO
EXEC sp_bindefault 'date_today','date_time';
--将默认值对象date_today绑定到自定义数据类型date_time上
GO
CREATE TABLE table3(--新建table3,设置字段t3_date的数据类型为date_time
    t3_id VARCHAR(12),
    t3_name VARCHAR(20),
    t3_class VARCHAR(12),
    t3_type VARCHAR(12),
    t3_date date_time
);
GO
INSERT INTO table3(--为新建表table3插入一条数据,不指定t3_date的值,看默认值是否有效
    t3_id,
    t3_name,
    t3_class,
    t3_type
)VALUES(
'2018038220',
'李建',
'社会与科学',
'类型1'
);
GO
SELECT * FROM table3;--查询table3数据,看t3_date是否有默认值为当前日期

询问结果如下
图片 18

ALTER TABLE table3
ADD t3_date1 DATE;--在table3表中新增一列t3_date1,数据类型为DATE
GO
EXEC sp_bindefault 'date_today','table3.t3_date1';
--直接将默认值对象date_today绑定到table3的t3_date1列
GO
INSERT INTO table3(--为新建表table3插入一条数据,不指定t3_date和t3_date1的值,看默认值是否有效
    t3_id,
    t3_name,
    t3_class,
    t3_type
)VALUES(
'2018038221',
'李建',
'社会与科学',
'类型'
);
GO
SELECT * FROM table3;
GO

询问结果如下
图片 19

3.4.WHILE语句

用于安装双重执行T-SQL语句或语句块的尺度。
示例11:用“*”在显示屏上输出三个幅度为9的菱形。
执行下列语句

DECLARE @width int,@j int
SET @width=9--@width为菱形的最大宽度
SET @j=1--@j表示每行打印的“*”符号的个数
WHILE @j<=@width
BEGIN
PRINT SPACE((@width-@j)/2)+REPLICATE('*',@j)--SPACE函数打印n个空字符,REPLICATE打印n个特定字符串
SET @j=@j+2
END
SET @j=@width-2
WHILE @j>0
BEGIN
PRINT SPACE((@width-@j)/2)+REPLICATE('*',@j)
SET @j=@j-2
END

结果如图所示
图片 20

仓库储存进度查询私下认可值对象的全体者
USE test
EXEC sp_help date_today;
GO

结果如图所示
图片 21

3.5.WAITFOENVISION延迟语句

WAITFOLacrosse延迟语句可以让在它以后的言语在三个点名的天天大概时间间隔后进行,能够悬挂起批处理,存款和储蓄进程或作业的履行。
示例12:在有些时刻点查询Student表学号为20180101的学生音讯

BEGIN
WAITFOR TIME '15:03'--在15点03分查询
SELECT * FROM Student
WHERE stu_no='20180101'
END

示例13:在3分钟后查询Student表学号为20180102的学习者音信

BEGIN
WAITFOR DELAY '00:03'--在3分钟后查询
SELECT * FROM Student
WHERE stu_no='20180102'
END

图片 22

删去私下认可值对象
DROP DEFAULT date_today;

剔除不成事,提示以下音信:
消息3716,级别16,状态3,第1 行
胸中无数删除暗许值’date_today’,因为它已绑定到3个或多少个列。
那正是说我们知晓,当2个暗中同意值对象绑定了列之后,就不能够删除它,要是想要删除,就务须先解绑。在地点的操作中,大家的默许值对象date_today绑定了test数据库table3表的t3_date1字段。

3.6.RETU汉兰达N无条件退出语句

该语句表示无条件结束查询,批处理或存款和储蓄进程的施行。存款和储蓄进程和批处理RETU奥迪Q7N语句前边的语句都不再实施。当在储存进程中运用该语句时,能够钦定重返给调用应用程序、批处理或进程的整数值。假诺RETU纳瓦拉N未钦点再次回到值,则存款和储蓄进度的再次来到值是0

对列解绑暗许值对象
USE test
GO
EXEC sp_unbindefault 'table3.t3_date1';

此时我们重新尝试删除默许值对象,发现依旧至极,此时要小心,在上头的操作中,默许值对象date_today不止绑定了t3_date1列,还绑定了自定义数据类型date_time,并将该数据类型定义给了t3_date列,大家还索要对date_time解绑私下认可值对象。

EXEC sp_unbindefault 'date_time';

那会儿再次删除暗中认可值对象,就能够成功删除。删除暗中认可值对象后,原先绑定的字段不会再有私下认可值。

3.7.GOTO跳转语句

该语句使T-SQL批处理的推行跳转至钦赐标签。由于该语句破坏结构化语句的结构,尽量少用
示例13:将GOTO作为分支机制
实践下边语句

DECLARE @Counter int;  
SET @Counter = 1;  
WHILE @Counter < 10  
BEGIN   
    SELECT @Counter  
    SET @Counter = @Counter + 1  
    IF @Counter = 4 GOTO Branch_One --Jumps to the first branch.  
    IF @Counter = 5 GOTO Branch_Two  --This will never execute.  
END  
Branch_One:  
    SELECT 'Jumping To Branch One.'  
    GOTO Branch_Three; --This will prevent Branch_Two from executing.  
Branch_Two:  
    SELECT 'Jumping To Branch Two.'  
Branch_Three:  
SELECT 'Jumping To Branch Three.';

结果如图所示
图片 23
当Counter=4时,执行GOTO语句输出Branch
One,执行完这一个讲话之后就打破了WHILE循环,接着执行Branch_One语句中的GOTO,输出Branch
Three,甘休。

注:在WHILE循环中利用GOTO会打破循环。

示例14:用GOTO语句实现示例1第11中学打字与印刷菱形的功效
推行下列语句

DECLARE @width int,@j int,@i int
SET @width=9--@width为菱形的最大宽度
SET @j=1--@j表示每行打印的“*”符号的个数
SET @i=1--@i表示下一行打印第i行
Set3:PRINT SPACE((@width-@j)/2)+REPLICATE('*',@j)--SPACE函数打印n个空字符,REPLICATE打印n个特定字符串
SET @i=@i+1
IF @i<=(@width+1)/2
GOTO Set1
ELSE
GOTO Set2
Set1:
SET @j=@j+2
GOTO Set3
Set2:
SET @j=@j-2
IF @j>=1
GOTO Set3

结果如图所示
图片 24

自定义规则维护数据完整性

平整是对列或自定义数据类型的值的规定和范围。自定义规则的表明式一定要回来布尔类型的值,并且表达式中不可能包括八个变量。

CREATE RULE score_rule AS @math_score>=0;
GO--新建规则score_rule,参数@math_score
EXEC sp_addtype 'score_type','float','NULL';
GO--新建自定义数据类型score_type
CREATE TABLE table_score(--新建表table_score,预设mt_score和at_score字段用于绑定规则
s_id VARCHAR(4),
s_name VARCHAR(10),
mt_score float,--该字段将用于规则score_rule绑定到列
at_score score_type--该字段将用于规则score_rule绑定到自定义数据类型
);
GO
EXEC sp_bindrule 'score_rule','score_type';
GO--将score_rule规则绑定到自定义数据类型score_type
EXEC sp_bindrule 'score_rule','table_score.mt_score';
GO--将score_rule规则绑定到table_score表的mt_score列

----以下进行规则测试
INSERT INTO table_score(
s_id,
s_name,
mt_score,
at_score
)VALUES(
'0001',
'张华',
'-1',
'-1'
);
GO

进行违反规则的插入后,数据库报错
消息513,级别16,状态0,第1 行
列的插入或更新与原先的CREATE RULE
语句所内定的条条框框爆发争执。该语句已截至。争辨时有产生于数据库’test’,表’dbo.table_score’,列’mt_score’。

讲话已告一段落。
很明显,mt_score的插入值为-1,违反了亟须大于等于0的条条框框,数据库报错。将mt_score的插入值改成符合规则的数量,再一次运转插入语句,数据库依旧会报错,因为at_score字段的插入值也是反其道而行之规则的。将五个数据改成符合规则的归来,执行成功。

注:新建规则时表达式一定假诺回到布尔类型的值,不然会报错

消息4145,级别15,状态1,过程sum_score,第1 行
在应运用规则的上下文(在’;’ 附近)中钦命了非布尔类型的表明式。

3.8.T奥德赛Y CATCH错误处理语句

只要TRubiconY块内部爆发错误,会将决定传递给CATCH块内的语句组。TPRADOY
CATCH构造捕捉全体严重级别大于10但不会告一段落数据库连接的失实。
示例15:TRY CATCH的示例
执行下列语句

BEGIN TRY
SELECT * FROM Student
SELECT 120/0 FROM Student
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS '错误信息'
END CATCH

实施结果如图所示
图片 25
语句中二个select语句全体都举办了。假若把报错的select语句放到平常的select语句前边,不奇怪的select语句还是能否执可以吗?执行下列语句

BEGIN TRY
SELECT 120/0 FROM Student
SELECT * FROM Student
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS '错误信息'
END CATCH

结果如图所示
图片 26
寻常select语句相当小概推行。T奥迪Q5Y
CATCH语句的逻辑是,一旦T奥迪Q5Y语句块中冒出难题讲话,马上跳转到CATCH语句块,T奥德赛Y语句块接下去的语句不再实施。

除去自定义规则

和自定义暗中同意值对象一样,删除自定义规则须求该规则先与字段和自定义数据类型解绑。在下边包车型地铁操作中,score_rule规则与自定义数据类型score_type以及列mt_score已绑定。因而实施以下语句:

EXEC sp_unbindrule 'score_type';
GO--解除规则score_rule与score_type之间的绑定
EXEC sp_unbindrule 'table_score.mt_score';
GO--解除规则score_rule与表table_score的mt_score列的绑定
DROP RULE score_rule;--删除score_rule规则

注:经过试验,三个列只好绑定1条规则,如果对1个列绑定2条规则,前一条规则会被后一条规则顶替。

4.常用函数

查看自定义规则
EXEC sp_help 'score_rule';

结果如图所示
图片 27

4.1.数据类型转换函数

暗中同意情状下SQL
Server会对部分数据类型举行机动转换,那种转移称为隐式转换。碰着不能够自动转换,则需求用CAST()函数和CONVERT()函数转换,那种转移称为显式转换。CAST()函数和CONVERT()函数的效率是相同的,CAST函数更便于接纳,CONVE福睿斯T函数的帮助和益处是足以钦点日期和数值格式。
示例16:将Student表中的学号转换为日期格式
下边两句语句的功力是一模一样的,执行下列语句

SELECT stu_name,CAST(stu_no AS DATE) AS 学号转换成日期,stu_enter_score,stu_birthday FROM Student
SELECT stu_name,CONVERT(DATE,stu_no) AS 学号转换成日期,stu_enter_score,stu_birthday FROM Student

结果如图所示
图片 28
示例17:用CONVERT()函数将stu_birthday转化成钦赐格式的日期
实行下列语句

SELECT stu_name,CONVERT(VARCHAR(20),stu_birthday,101) FROM Student
--CONVERT函数将DATE类型的stu_birthday字段转化为字符串,并限定了样式,代码101

结果如图所示
图片 29

注:在上述代码中,CONVEEscortT(DATE,stu_birthday,101)这么写是没用的。101格式码只对日期格式转化为字符串有效,别的格式转化为日期格式是低效的。

其余常用函数太简单了此处不写了,略。

查阅自定义规则的概念音讯
EXEC sp_helptext 'score_rule';
GO

结果如图所示
图片 30

留下评论

网站地图xml地图