资源描述
SQL Server 技巧大全
数据完整性
1. 实体完整性约束:数据行不能有重复,每一行数据都由主键来唯一确定
2. 域完整性约束:实现了对输入到特定列的数值的限制
3. 引用完整性约束:用来保持表之间已定义的关系
4. 自定义完整性约束:用来定义特定的规则
SQL Server中存在五种约束,分别是:主键约束、外键约束、检查约束、默认约束和唯一性约束
如果建立了主表和子表的关系,则:
● 子表中的相关项目的数据,在主表中必须存在
● 主表中相关项的数据更改了,则子表对应的数据项也应当随之更改
● 在删除子表之前,不能够删除主表
T-SQL的组成:
◇ DML(数据操作语言)用来查询\插入\删除和修改数据库中的数据
◇ DCL(数据控制语言)用来控制数据库组件的存取许可、存取权限等的命令
◇ DDL(数据定义语言)用来建立数据库、数据库对象和定义其列,大部分是以create开头的命令
使用INSERT插入数据行
INSERT [INTO] <表名> [列名] VALUES <值列表>
一次插入多行数据
1. 通过INSERT SELECT语句将现有表中的数据添加到新表
INSERT INTO TongXuLu(‘姓名’,’地址’,’电子邮件’)
SELECT SName,SAddress,SEmail
FROM Students
2. 通过SELECT INTO语句将现有表中的数据添加新表
SELECT Students.SName,Students.SAddress,Students.SEmail INTO TongXuLu FROM Students
创建一个新的标识列
SELECT IDENTITY (数据类型,标识种子,标识增长量) AS 列名 INTO 新表 FORM 原始表
3. 通过UNION关键字合并数据进行插入
INSERT Students (SName,SGrade,SSex)
Select ‘女生1’,7,0 UNION
…
Select ‘女生n’,7,0
使用T-SQL更新数据
UPDATE <表名> SET <列名=更新值> [WHERE <更新条件>]
使用T-SQL删除数据
DELECT FROM <表名> [WHERE <删除条件>]
使用TRUNCATE TABLE删除数据
TRUNCATE TABLE 表名
使用SELECT语句进行查询
SELECT <列名> FROM <表名> [WHERE <查询条件表达式>] [ORDER BY <排序的列名> [ASC或DESC]]
查询空行
Select SName from Students where SEmail is null
查询返回限制的行数
Select top 5 SName,SAddress from Students where SSex = 0
Select top 20 percent SName,SAddress from Students where SSex = 0
字符串函数
函 数 名
描 述
举 例
返 回 值
ASCII
返回字符表达式最左端字符的ASCII代码值
ASCII('a')
97
CHAR
将int ASCII代码转换为字符值
CHAR(65)
A
CHARINDEX
用来寻找一个指定的字符串在另一个字符串中的起始位置
CHARINDEX('ACCP','My Accp Course',1)
4
DATALENGTH
返回字符串包含的字符数,但不包含后面的空格
DATALENGTH('abc')
3
LEN
返回传递给它的字符串长度
LEN('SQL Server 课程')
12
LOWER
把传递给它的字符串转换为小写
LOWER('SQL Server 课程')
sql server 课程
UPPER
把传递给它的字符串转换为大写
UPPER('SQL Server 课程')
SQL SERVER 课程
LTRIM
清除字符左边的空格
LTRIM(' 周智宇')
去掉前面的空格
RTRIM
清除字符右边的空格
RTRIM(' 周智宇')
去掉后面的空格
RIGHT
从字符串右边返回指定数目的字符
RIGHT('买卖提.吐尔松',3)
吐尔松
REPLACE
替换一个字符串中的字符
REPLACE('莫乐可切.杨可','可','兰')
莫乐兰切.杨兰
REVERSE
反转字符串
REVERSE('abc')
cba
SPACE
生成空格
'abc'+SPACE(10)+'abc'
abc abc
STUFF
删除指定长度的字符,并在该位置插入一个新的字符串
STUFF('ABCDEFG',2,3,'我的音乐我的世界')
A我的音乐我的世界EFG
SUBSTRING
取子串
SUBSTRING('abcd',1,4)
abcd
日期函数
函 数 名
描 述
举 例
返 回 值
GETDATE
取得当前的系统日期
GETDATE()
系统日期
DATEADD
将指定的数值添加到指定的日期部分后的日期
DATEADD(mm,4,'01/01/99')
以当前的日期格式返回05/01/99
DATEDIFF
两个日期之间的指定日期部分的区别
DATEDIFF(mm,'01/01/99','05/01/99')
4
DATENAME
日期中指定日期部分的字符串形式
DATENAME(dw,'01/01/2000')
Saturday
DATEPART
日期中指定日期部分的整数形式
DATEPART(day,'01/15/2000')
15
数学函数
函 数 名
描 述
举 例
返 回 值
ABS
取数值表达式的绝对值
ABS(-43)
43
CEILING
取大于或等于的最小整数
CEILING(43.5)
44
FLOOR
取小于或等于的最大整数
FLOOR(43.5)
43
PI
圆周率
PI()
3.14159265358979
POWER
取数值表达式的幂值
POWER(5,2)
25
ROUND
四舍五入为指定精定
ROUND(43.543,1)
43.5
SIGN
对于正数返回+1,对于负数返回-1,对于0则返回0
SIGN(-43)
-1
SQRT
平方根
SQRT(9)
3
系统函数
函 数 名
描 述
举 例
返 回 值
CAST
用来显式转变数据类型
CAST('123' AS int)+10
133
CONVERT
用来转变数据类型
CONVERT(VARCHAR(5),12345)
字符串12345
CURRENT_USER
返回当前用户的名字
SELECT CURRENT_USER
你登录的用户名
DATALENGTH
返回用于指定表达式的字节数
DATALENGTH('中国A联盟')
9
HOST_NAME
返回当前用户所登录的计算机名
HOST_NAME()
你所登录的计算机名
SYSTEM_USER
返回当前所登录的用户名
SYSTEM_USER
你当前所登录的用户名
USER_NAME
从给定的用户ID返回用户名
USER_NAME(1)
从任意数据库中返回"dbo"
使用LINK进行模糊查询
Select * from Card where ID LINK ‘00[^8]%[A,C]%’ //查询不是八朋发行的A卡或C卡
使用BETWEEN在某个范围内进行查询
Select * from Score where Score BETWEEN 60 AND 80 //使用NOT来对限制条件″取反″操作
使用IN在列举值内进行查询
Select SName from Students where SAddress In(‘北京’,’广州’,’上海’)
SQL Server中的聚合函数
1. SUM:返回表达式中所有数值的总和
2. AVG:返回表达式中所有数值的平均值
3. MAX和MIN:返回表达式中的最大值和最小值
4. COUNT:返回提花的表达式中非空值的计数
使用Group By进行分组查询
Select CourseID,AVG(Score) from Score Group By CourseID
使用HAVING子名进行分组筛选
Select StudentID,CourseID,AVG(Score) from Score Group By StudentID,CourseID Having count(Score)>1
多表联接查询
1. 内联接:根据表中共同的列来进行匹配
(1) 在WHERE子句中指定联接条件
Select Students.SName,Score.CourseID,Score.Score from Students,Score where Students.Score=Score.StudentID
(2) 在FROM子句中使用JOIN…ON
Select S.SName,C.CourseID,C.Score from Students as S INNER JOIN Score as C on (S.Score=C.StudentID)
2. 外联接
(1) 左外联接查询:结果集包括LEFT OUTER子名中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没匹配行,则在相关的结果集行中右表的所有选择列均为空值
Select S.SName,C.CourseID,C.Score from Students as S LEFT OUTER JOIN Score as C on S.Score=C.StudentID
(2) 右外联接查询:返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值
Select Titles.Title_id,Titles. Title,Publishers.Pub_name from Titles RIGHT OUTER JOIN Publishers on Titles.Pub_id=Publishers.Pub_id
(3) 完整外查询:FULL JOIN或FULL OUTER JOIN,返回左表和右表中的所有行,当某行在另一个表中没有匹配行时,则另一个表的选择列包含空值,如果表之间有匹配行,则整个结果集行包含基表的数据值
3. 交叉联接:返回左表中的所有行,左表中的每一行与右表中的所有行再一一组合,相当于两个表″相乘″
select * from spt_values cross join MSreplication_options
数据库设计:就是将数据库中的数据对象以及这些数据对象之间关系,进行规划和结构化的过程
设计数据库的步骤:
(1) 收集信息
(2) 标识对象(实体)
(3) 标识每个对象需要存储的详细信息(属性)
(4) 标识对象(实体)之间的关系
实体-关系模型:
1. 实体:指现实世界中具有区分其他事物的特征或属性并与其他实体有联系的对象
2. 属性:实体的特征
3. 关系:两个或多个实体之间的联系
4. 映射基数:表示可以通过关系与该实体关联的其他实体的个数
一对一、一对多、多对一和多对多
5. 实体关系图
E-R图的组成包括以下几部分
♂ 矩形表示实体集
♂ 椭圆形表示属性
♂ 菱形表示关系集
♂ 直线用来连接属性和实体集,也用来连接实体集和关系集
数据规范化:从关系数据库表中除去冗余数据的过程。如果使用得当规范化是用于获得高效的关系数据库表的逻辑结构的最好和最容易的方法。规范化数据时,应执行下列操作
1. 将数据库的结构精简为最简单的形式
2. 从表中删除冗余的列
3. 标识所有依赖于其他数据的数据
规范设计
1. 第一范式(1NF,Normal Formate)
确保每列的原子性。如果每列(或每个属性值)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式
2. 第二范式(2NF)
第二范式在第一范式的基础上,更进一层,其目标是确保表中的每列都和主键相关:如果一个关系满足1NF,并且除了主键以外的其他列,都依赖于该主键,则满足第二范式
3. 第三范式(3NF)
第三范式在第二范式的基础上,更进一层,第三范式的目标是确保每列都和主键列直接相关,而不是间接相关。如果一个关系满足2NF,并且除了主键以外的其他列都不依赖于主键列,则满足第三范式
SQL Server中的数据类型
类 型
数据类型
描 述
整型
Int
存储-231(-2147483648)~ 231(2147483647)之间的整数。占用4个字节
Smallint
存储-215(-32768)~ 215(32767)之间的整数。占用2个字节
Tinyint
存储0~255之间的整数。占用1个字节
bigint
存储-263(-9223372036845775808) ~ 263-1(9223372036845775807)之间的所有正负整型数据,占用8个字节
浮点型
Numberic
与decimal型相同
Real
像浮点数一样,是近似数值类型。在-3.40E+38 ~ -1.18e-38、0以及1.18e-38到3.40E+38之间的浮点数
Float
是一种近似数,供浮点数使用。在1.79E+308~1.79E+308之间的任意数
Decimal
存储-1038~ 1038之间的固定精度和范围的数值型数据。范围是小数点左右所能存储的数字的总位数,精度是小数点右边存储的数字的位数,形式:decimal[(p[,s])],其中,p是指精度,指定小数点左边和右边可存储的十进制数字的最大个数,数度必须是1到38之间的值,s是指小数数位,必须是0到精度p之间
字符型
Char
存储指定长度的定长非统一编码型的数据,最大长度为8000个字符
Varchar
同char类型一样,用来存储非统一编码型字符数据。与char类型不一样的是,此数据类型为变长。当定义一列为该数据类型时,要指定该列的最大长度
Text
存储大量的非统一编码型字符数据。最多可有231-1或20亿个字符
Unicode型
Nchar
存储定长Unicode(统一编码)字符型数据,用双字节结构来存储每个字符,而不是用单字符。它允许大量地扩展字符。能存储4000种字符,使用的字节空间增加了一倍
Nvarchar
用作变长Unicode编码字符型数据。能存储4000种字符,使用的字节空间增加了一倍
Ntext
存储大量的Unicode编码字符型数据。能存储230 -1或10亿个字符,使用的字节空间增加了一倍
是/否型
Bit
表示是/否值,其值只能是0、1。用于存储只有两种可能值的数据
二进制型
Binary
存储可达8000字节长的定长的二进制数据
Varbinary
存储可达8000字节长的变长的二进制数据
Image
存储变长的二进制数据,最大可达230 -1或20亿个字符
货币型
money
用来表示钱和货币值,存储从-9220~9220亿之间的数据,可以精确到货币单位1/10000
Smallmoney
用来表示钱和货币值,存储从-214748.3648~214748.3647之间的数据,可以精确到货币单位1/10000
日期时间型
Datatime
用来表示日期和时间。存储从1753年1月1日到9999年12月31日间所有的日期和时间数据,可以精确到11300秒或3.33毫秒
Smalldatetime
表示从1900年1月1日到2079年6月6日间的日期和时间,精确到一分钟
特殊类型
Timestamp
是一种特殊的数据类型,用来创建一个数据库范围内的唯一时间戳。一个表中只能有一个timestamp列。每次插入或修改一行时,timestamp列的值都会改变。尽管它的名字中有″time″,但timestamp列不是人们可识别的日期。在一个数据库中,timestamp值是唯一的
uniqueidentifier
用来存储一个全局的唯一标识符,即GUID。这个数几乎没有机会在另一个系统中被重建。可以使用NEWID函数或转换一个字符串为唯一标识符来初始化具有标识符的列
用T-SQL建立文件夹目录:exec xp_cmdshell 'md c:\wuguanfeng'
语法:EXEC xp_cmdshell DOS命令 [NO_OUTPUT]
其中EXEC表示调用存储过程,NO_OUTPUT为可选参数,设置执行DOS命令后是否输出返回信息
如果不能执行xp_cmdshell,则用命令行参数sp_configure 'show advanced option',1
数据库文件由以下3部分绘成
1. 主数据文件:*.mdf
2. 次要数据文件:*.ndf
3. 日志文件:*.ldf
创建数据库
Create database 数据库名
on [primary]
(
<数据库文件参数> [,…n] [<文件组参数>]
)
[Log on]
(
{<日志文件参数> [,…n]}
)
文件的具体参数语法如下:
([NAME=逻辑文件名,]
FILENAME=物理文件名
[, SIZE=大小]
[, MAXSIZE={最大容量|UNLIMITED}]
[, FILEGROWTH=增长量]) [,…n]
其中,[]表示可选部分,{}表示必需的部分
删除数据库
If exists(select * from sysdatabases where name=’数据库名’)
Drop database数据库名
创建表
Create table 表名
(
字段1 数据类型 列的特征,
字段2 数据类型 列的特征,
…
)
删除表
If exists(select * from sysobjects where name=’表名’)
Drop table 表名
使用SQL语句创建约束
---添加主键约束(将stuNo作为主键)
ALTER TABLE stuInfo ADD CONSTRAINT PK_stuNo PRIMARY KEY (stuNo)
---添加唯一约束(身份证号唯一,因为每个人的身份证号全国唯一)
ALTER TABLE stuInfo ADD CONSTRAINT UQ_stuID UNIQUE (stuID)
---添加默认约束(如果地址不填,默认为″地址不祥″)
ALTER TABLE stuInfo ADD CONSTRAINT DF_stuAddress DEFAULT (‘地址不祥’) FOR stuAddress
---添加检查约束(要求年龄只能在15~40岁之间)
ALTER TABLE stuInfo ADD CONSTRAINT CK_stuAge CHECK (stuAge BETWEEN 15 AND 40)
---添加外键约束(主表stuInfo和从表stuMarks建立关系,关联字段为stuNo)
ALTER TABLE stuMarks ADD CONSTRAINT FK_stuNo FOREIGN KEY(stuNo) REFERENCES stuNo(stuNo)
使用SQL语句删除约束
ALTER TABLE stuInfo DROP CONSTRAINT DF_stuAddress
使用SQL语句创建登录
创建登录账户
Windows:EXEC sp_grantlogin ‘windows域名\域账户’
SQL:EXEC sp_addlogin ‘账户名’,’密码’
创建数据库用户
EXEC sp_grantdbaccess ‘登录账户’,’数据库用户’
给数据库用户授权
Grant 权限 [ON 表名] TO 数据库用户
局部变量
DECLARE @variable_name DataType
variable_name为局部变量的名称,DataType为数据类型
使用SET语句或SELECT语句赋值
全局变量
变 量
含 义
@@CONNECTIONS
记录自最后一次服务器启动以来,所有针对这服务器进行的连接数目,包括没有连接成功的尝试
@@CPU_BUSY
记录自最近一次服务器启动以来,以ms为单位的CPU工作时间
@@CURSOR_ROWS
返回在本次服务器连接中,打开游标取出数据行的数目
@@DBTS
返回当前数据库中timestamp数据类型的当前值
@@ERROR
最后一个T-SQL错误的错误号
@@IDENTITY
最后一次插入的标识值
@@IDLE
返回以ms为单位计算SQL Server服务器自最近一次启动以来处于停顿状态的时间
@@IO_BUSY
返回以ms为单位计算SQL Server服务器自最近一次启动以来花在输入和输出上的时间
@@LANGUAGE
当前使用的语言的名称
@@LOCK_TIMEOUT
返回当前对数据锁定的超时设置
@@MAX_CONNECTIONS
可以创建的同时连接的最大数目
@@PACK_RECEIVED
返回SQL Server服务器自最近一次启动以来从网络上接收数据分组的总数目
@@PACK_SENT
返回SQL Server服务器自最近一次启动以来一共向网络上发送数据分组的数目
@@PROCID
返回当前存储过程的ID标识
@@REMSERVER
返回在登录记录中记载远程SQL Server服务器的名字
@@ROWCOUNT
受上一个SQL语句影响的行数
@@SERVERNAME
本地服务器的名称
@@SERVICENAME
该计算机上的SQL服务的名称
@@SPID
返回当前服务器进程的ID标识
@@TIMETICKS
当前计算机上每刻度的微秒数
@@TOTAL_ERRORS
返回自SQL Server服务器启动以来,所遇到读写错误的总数
@@TOTAL_READ
返回自SQL Server服务器启动以来,读磁盘的次数
@@TOTAL_WRITE
返回自SQL Server服务器启动以来,写磁盘的次数
@@TRANCOUNT
当前连接打开的事务数
@@VERSION
SQL Server的版本信息
输出语句
Print 局部变量或字符串
Select 局部变量 as 自定义列名
IF-ELSE条件语句
IF (条件)
语句或语句块
ELSE
语句或语句块
同Java语言一样,ELSE为可选,如果有多条语句,需要使用语句块,用BEGIN…END表示
为了把输出的表格数据和文本消息显示在同一个窗口中,需要做如下设置:
单击Microsoft SQL Server Studio的菜单中″工具″à″选项″命令,选择″查询结果″选项,将″显示结果的默认方式″设置为″以文本格式显示结果″
WHILE循环语句
WHILE (条件)
语句或语句块
[BREAK]
使用BREAK关键字从最内层的WHILE循环中退出
CASE多分支语句
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
[ELSE 其他结果]
END
批处理语句:它是一条或多条SQL语句的集合,主要好处是能够简化数据库的管理、提高语句执行的效率,批处理结束的标志是″GO″
子查询:一般来说,表连接都可以用子查询替换,但反过来说却不一定,有的子查询不能用表连接替换,子查询比较灵活、方便,形式多样,适合于作为查询的筛选条件,而表连接更适合于查看多表的数据
IN和NOT IN子查询
IN后面的子查询可以返回多条记录,用于限制某列的筛选范围
EXISTS和NOT EXISTS子查询
从理论上讲,EXISTS可以作为WHILE语句的子查询,但一般用于IF语句的存在检测,如果子查询的结果非空,则EXISTS(子查询)将返回true,否则返回false
合并多个表中的数据有以下3种方法
4. 联合(Union)----合并多个数据表中的行
5. 子查询----将一个查询包含到另一个查询中
6. 连接----合并多个数据表中的列
事务:是指一组相互依赖的操作单元的集合,用来保证对数据库的正确修改,保持数据的完整性,如果一个事务的某个单元操作失败,将取消本次事务的全部操作。数据库事务必须具备以下特征(简称ACID):
(1) 原子性(Atomicity):事务是一个完整的操作,条元素是不可分的,所有元素必须作为一个整体提交或回滚,如果事务中的任何元素失败,则整个事务将失败
(2) 一致性(Consistency):当事务完成时,数据必须处于一致状态
(3) 隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。修改数据的事务可以在另一个使用相同数据的事务开始之前访问这些数据,或在另一个使用相同数据的事务结束之后访问这些数据
(4) 持久性(Durability):事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障,也将一直保持
开始事务:BEGIN TRANSACTION
提交事务:COMMIT TRANSACTION
回滚事务:ROLLBACK TRANSACTION
事务的分类有以下3种
◆ 显式事务:用BEGIN TRANSACTION明确指定事务的开始
◆ 隐式事务:通过设置SET IMPLICIT_TRANSACTIONS ON语句,将隐式事务模式设置为打开。当以隐式事务操作时,SQL Server将在提交或回滚事务后自动启动新事务。无法描述事务的开始,只需提交或回滚事务
◆ 自动提交事务:这是SQL Server的默认模式,它将每条单独的T-SQL语句视为一个事务。如果成功执行,则自动提交。如果错误,则自动回滚
索引:可以大大提高数据库的检索速度,改善数据库性能
唯一索引:不允许两行具有相同的索引值。如果现有数据中存在重复的键值,则一般情况下大多数数据库都不允许创建唯一索引。创建了唯一约束,将自动创建唯一索引,尽管唯一索引有助于找到信息,但为了获得最佳性能,建议使用主键约束
主键索引:在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。它要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据
聚集索引:在聚集索引中,表中条行的物理顺序与键值的逻辑(索引)顺序相同。表只能包含一个聚集索引。如果不是聚集索引,则表中各行的物理顺序与键值的逻辑顺序不匹配。聚集索引比非聚集索引有更快的数据访问速度。在SQL Server中,一个表只能创建一个聚集索引,但可以有多个(最多249个)非聚集索引,设置某列为主键,该列就默认为聚集索引
创建索引
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX 索引名
ON 表名 (列名[,列名]…) [WITH FILLFACTOR=x]
UNIQUE指定唯一索引,可选;CLUSTERED、NONCLUSTERED指定是聚集索引还是非聚集索引,可选;FILLFACTOR表示填充因子,指定0~100的值,该值指示索引面填满的空间所占的百分比
删除索引
IF EXISTS(select * from sysindexes where name=’索引名’)
DROP INDEX 表名.索引名
指定按索引查询
Select * from 表名 (索引名) where 条件
视图:存在于数据库中的″虚拟表″,用户可以像使用表一样使用视图
创建视图
CREATE VIEW 视图名 AS <select语句>
修改视图
ALTER VIEW 视图名 AS <select语句>
删除视图
IF EXISTS(select * from sysobjects where name=视图名)
DROP VIEW 视图名
常用的系统存储过程
系统存储过程
说 明
Sp_databases
列出服务器上的所有数据库
Sp_helpdb
报告有关指定数据库或所有数据库的信息
Sp_renamedb
更改数据库的名称
Sp_tables
返回当前环境下可查询的对象的列表
Sp_columns
返回某个表列的信息
Sp_help
查看某个表的所有信息
Sp_helpconstraint
查看某个表的约束
Sp_helpindex
查看某个表的索引
Sp_stored_procedures
列出当前环境中的所有存储过程
Sp_password
添加或修改登录账户的密码
Sp_helptext
显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本
存储过程的优点
(1) 允许模块化程序设计
(2) 允许更快地执行
(3) 减少网络流量
(4) 可作为安全机制使用
创建存储过程
CREATE PROC 存储过程名
[
{@参数1 数据类型} [=默认值] [OUTPUT],
……,
{@参数n 数据类型} [=默认值] [OUTPUT]
]
AS SQL语句
修改存储过程
ALTER PROC p_selectGoods
@goodsID int=1 --定义参数
AS
Select * from tb_goods where ID>@goodsID
删除存储过程
IF ESISTS(select * from sysobjects where name=存储过程名)
DROP PROC 存储过程名
获取指定存储过程语句
EXEC sp_helptext[@objname=]'name'
参数说明
● sp_helptext:系统存储过程名称
● [@objname=]'name':对象的名称,对象必须在当前数据库中存在
/*--- 创建并调用不带参数的存储过程 ---*/
CREATE PROC p_selectUser AS select * from tb_user where Status='普通用户'
EXEC p_selectUser
/*--- 创建并调用带输入参数的存储过程 ---*/
CREATE PROC p_selectGoods
@goodsID int=1 --定义参数 默认值为1
AS
Select * from tb_goods where ID=@goodsID
EXEC p_selectGoods @goodsID=13
/*--- 创建并调用带输出参数的存储过程 ---*/
CREATE PROC p_getMaxID
@orderID varchar(30) output
AS
set @orderID='创建带返回参数的存储过程'
DECLARE @maxID varchar(30)
EXEC p_getMaxID @maxID output --执行存储过程
SELECT @maxID --显示返回值
处理错误信息
RAISERROR:用于在SQL Server系统返回错误信息的同时返回用户指定的信息,语法:
RAISERROR({msg_id|msg_str}{,severity,state})[,argument[,...n]][WITH option[,...n]]
♂ msg_id:存储于sysmessages表中的用户定义的错误信息。用户定义错误信息的错误号应大于50000
♂ msg_str:是一条特殊消息,最多可包含400个字符
♂ severity:用户定义的与消息关联的严重级别。从0-18之间为严重级别,19-25之间的为严重级别只能由sysadmin固定服务器角色成员使用,必须选择WITH LOG选项
♂ state:从1-127的任意整数,表示有关错误调用状态的信息
♂ argument:用于取代msg_str中定义的变量或取代msg_id的消息参数,替代总数不能超过20个
♂ option:错误的自定义选项
RAISERROR (‘及格线错误,请指定0-100之间的分数,统计中断退出’,16,1)
引发系统错误,指定错误的严重级别为16,调用状态为1(默认)。错误的严重级别大于10,将自动设置系统全局变量@@ERROR为非零值,表示语名执行出错
备份数据库
BACKUP DATABASE database_name
To <backup_device>
[With [Differential][[,]Format | Noformat][,]{Init | Noinit}]
<backup_device>::=
{{Disk | Type} = 'physical_backup_device_name'}
* database_name:备份的数据库名称
* To:关键字,用于指定备份设备
* <backup_device>:一个备份设备,用于存储备份数据,其中Disk表示在磁盘上存储备份数据,Tage表示在磁带设备上存储备份设备。physical_backup_device_name表示磁盘事磁带上的物理路径,通常用于指定一个备份文件
* Differential:指定数据库备份或文件备份应该与上一次完整备份后改变的数据库或文件部分保持一致
* Format:表示重写媒体头
* Noformat:表示指定媒体头不应写入所有用于该备份操作的卷中,并不要重写该备份设备
* Init:表示重写所有备份集,介保留媒体头
* Noinit:表示备份集将追加到指定的磁盘或磁带设备上,以保留现有的备份集,该选项是默认设置
还原数据库
RESTORE DATABASE database_name
[From <backup_device>[,…n]]
[With [File=file_number]]
* RESTORE DATABASE:关键字
* database_name:要还原的数据库名称
* From:关键字,表示从哪个备份设备上还原
* < backup_device>:用于指定一个备份设备,可以是一个磁盘或磁带上的备份文件
* File=file_number:标识要还原的备份集,file_number为1表示备份媒体上的第一个备份集
附加数据库
sp_attach_db [@dbname=]'dbname',[@filename1=]'filename_n'[,...]
* [@dbname=]'dbname':要附加到服务器的数据库名称,该名称必须是惟一的
* Dbname:数据类型为sysname,默认值为null
* [
展开阅读全文