笔记整理-数据库语言总结2012-12-2

定时备份操作:

管理->维护计划->备份数据库任务->子计划Subplan_1

1,在SQL配置管理器中打开网络配置中的TCP/IP协议就可以访问别人的SQL server用SQL用户登录,服务器名填对方IP地址之前把window防火墙都关了

2,次要文件是补充主要文件的不足

统一文件组下:1平均分配,2各文件平均分配存储

不同文件组下:文件组是隔离文件的,存储不同步各自存储互不影响,解决主磁盘不够和多块磁盘存储的问题。

例如,可以分别在三个磁盘驱动器上创建三个文件 Data1.ndf、Data2.ndf 和 Data3.ndf,然后将它们分配给文件组 fgroup1。然后,可以明确地在文件组 fgroup1 上创建一个表。

3,SQL登录名属于整个SQL对所有数据库都可以有权限,

服务器角色是服务器级别,可以操作所有用户

数据库用户名属于本数据库文件只对本文件有相应的权限,

数据库角色是数据库级别,只能操作本数据库文件

4,服务器登录名的用户映射属性映射相应数据库,再设定相应的数据库操作权限,这就实现了赋予某个数据库的权限给相应的数据库登陆用户和数据库使用用户

从登录名到用户和从用户到登录名的映射绑定

登录名只管登陆某个登录名进入SQL权限是它能对多少数据库进行操作,绑定这个登录名的所有数据库它都可以访问,进入SQL后对数据库的操作得看绑定这个登录名的用户的权限有什么权限

 

@我自己的操作和记录:

创建数据库和文件组

create database MYDB

on

(

name=mydb_dat,

filename=‘e:\data\mydb1_dat.mdf‘,

size=5MB,

maxsize=20mb,

filegrowth=5%

),

filegroup dbfg

(

name=dbfg_dat1,

filename=‘g:\data\mydb1_data1.ndf‘,

size=5mb,

maxsize=20mb,

filegrowth=5%

),

(

name=dbfg_dat2,

filename=‘j:\data\mydb1_data2.ndf‘,

size=5mb,

maxsize=20mb,

filegrowth=5%

)

log on

(

name=mudb_log,

filename=‘e:\data\mydb1_log.ldf‘,

size=3MB,

maxsize=20mb,

filegrowth=5%

)

查询数据库信息

sp_helpdb MYDB

 

修改数据库名

alter database MYDB(原名) modify name=MyDB(改后名),

 

存储过程修改

exec sp_dboption ‘mydb1‘,‘single‘,true    --原名

exec sp_renamedb ‘mydb1‘,‘mydb2‘           --原名,新名

exec sp_dboption  ‘mydb2‘,‘single‘,false  ---新名

 

修改数据库大小

use master               --使用master数据库更改

alter database mydb2   --更改的数据库名

modify file

(

name=mydb_dat,          --存储数据库的文件名

size=10mb,

filegrowth=1mb

)

 

use master

alter database mydb2

modify file

(

name=dbfg_dat1,

size=10mb,

filegrowth=1mb

)

 

增加数据库文件组的次要文件 :

use master

alter database mydb2

add file

(

filename=‘j:\data\mydb_dat3.ndf‘,

name=mydb_dat3,

size=7mb,

filegrowth=1mb

)

 

删除数据库:

drop database mydb

分离数据库

exec sp_detach_db dsafdsa

附加数据库

exec sp_attach_db  dsafdsa,‘D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\dsafdsa.mdf‘

备份数据库

法一

backup database mydb2 to disk=‘j:\data\database_bak.dat‘with name =‘backyp‘

法二

为数据库dsafdsa创建备份

exec sp_addumpdevice ‘disk‘,‘dsafdsa1‘,‘j:\data\20121126.dat‘

backup database dsafdsa to dsafdsa1

exec sp_dropdevice ‘dsafdsa1‘                      --备份数据库

EXEC sp_addumpdevice ‘disk‘, ‘dsafdsabfLog‘, ‘j:\data\dsafdsabf_Log.bak‘

BACKUP LOG dsafdsa  TO dsafdsabfLog              

exec sp_dropdevice dsafdsabfLog                   --备份日志

还原数据库

restore database mydb2 from disk=‘J:\data\database_bak.dat‘with replace、

查看日志

Dbcc log (mydb2,1)

——2012/11/26

创建局部临时表

create table #MyTempTabke

 (cola int null)

创建全局临时表

create table ##MyTempTabke

 (cola int not null)

创建表sales,包含以下字段order_no:订单编号,不为空,order_date:订货日期,不为空,ship_date:发货日期,不为空

更改表名

删除表sales

--增加表和表中的列

use mydb2

create table sales

(

id int identity  not null,     

order_id int not null,

order_date datetime  not null,

ship_date datetime not null

)

--修改表名

exec sp_rename sales ,saless

--删除表

drop table sales

创建计算列的表

use mydb2

--设置运算列

create table sells

(

price money,

number int,

amout as price*number,

amout1 as price+number,

amoout2 as price/number

)

--计算列公式设置在属性“计算列规范”里

修改表employee,对表字段的增删改 :

id int identity  not null:     

ID自动增长,而且id是先增长在判断的,错误就浪费了一个

添加列:电话号码 telephone_no

添加列:字符列email为char

修改列类型:email为varchar

修改列空为非空列

修改字段名:

删除列:删除email列

ALTER TABLE employee

ADD   

       email char(29) null,

       telephone int null

      

alter table employee

alter column email varchar(20) null

      

alter table employee

alter column email   varchar(30)not null 

 

exec sp_rename ‘dbo.employee.telephone‘,telephones,‘column‘

--统计列列名不让改

alter table employee    

drop column email

约束:

use mydb2

--创建主键约束

create table fubiao

(

id int identity primary key,

funame varchar(29),

fuid int

)

--创建外键约束

create table zibiao

(

ziname varchar(29),

fuid int foreign key    --fuid是zibiao的,作为外键,可以随便命名

references fubiao(id)  --引用父表中的id作为其外键

)

--修改为外键约束

alter table zibiao

add constraint FK_EmployeeCreatesOrder

Foreign key (fuid) references fubiao(id)

 

--创建级联关系

create table zi

(

id int identity primary key,

zname varchar(29),

fuid int

constraint FKOrderContrainsDetails

Foreign key (fuid)

References fubiao(id)

on update no action

on delete cascade

)

--唯一性约束

create table shippers

(

shipprid int identity not null primary key,

phone varchar(14)not null unique

)

--在表中添加列

alter table shippers

add phoneno varchar(14)not null

--为列设置唯一性约束

alter table shippers

add constraint AA_aa

unique(phoneno)

--在表中添加列

alter table shippers

add aaa varchar(14) null,

    bbb varchar(15) null

 

--check约束

alter table zi

Add constraint cn_customerdateinsystem

Check(sex in(‘男‘,‘女‘))

 

--默认值dafault约束

create table shipper

(

shipperid int identity not null primary key,

datenssystem datetime not null default getdate()

)

--修改表中列dafault约束

alter table shipper

add constraint cn_aaaa

default getdate() for aaa

--在已存在表上列加默认值

--该列必须为非空

create table ship

(

shipperid int identity not null primary key,

a datetime not null ,

b varchar(12) not null

)

alter table ship

add constraint cn_a

default getdate() for a

——以上2012/11/27

自定义类型:

Dsf

——以下2012-11-28

create database AccountSQL

on

(

name=AccountSQL_dat,

filename=‘G:\data1\AccountSQL_dat.mdf‘,

size=5mb,

maxsize=20mb,

filegrowth=1mb

)

log on

(

name=AccountSQL_log,

filename=‘G:\data1\AccountSQL_log.ldf‘,

size=5mb,

maxsize=20mb,

filegrowth=1mb

)

 

use AccountSQL

create table bigtype

(

id int identity not null primary key,

bigtypname varchar(20) not null

)

create table Smalltype

(

id int identity not null primary key,

smalltypname varchar(20)  not null,

bigtypeid int foreign key references  bigtype(id)

)

create table Member

(

id int identity not null primary key,

name varchar(10) not null,

)

create table Account

(

id int identity not null primary key,

MemberID int foreign key references Member(ID),

AccoutDateTime datetime not null default getdate(),

MoneyDateTime datetime not null ,

[money] money,

SmallTypeID int not null foreign key references Smalltype(ID)

)

--以上为创建数据库及其表和列

--一下为查询插入删除数据

use AccountSQL

 

select * from bigtype

 

insert into bigtype(bigtypname)

values(‘买进‘),(‘卖出‘)

select* from bigtype

delete bigtype where bigtypname=‘买进&卖出‘

select * from Smalltype

insert into Smalltype( smalltypname ,bigtypeid )

values(‘零食‘, 2),(‘工资‘,1),(‘冰箱‘,3),(‘基金‘,2)

select * from Member

insert into Member(name )

values(‘爸爸‘),(‘妈妈‘),(‘爷爷‘),(‘奶奶‘),(‘妹妹‘)

select * from Account

insert into Account(MemberID ,MoneyDateTime ,[money] ,SmallTypeID)

values (5,‘2012-12-12‘,100,2)

select * from bigtype

insert bigtype

select(smalltypname )from Smalltype

insert Account

select (smalltypname)from Smalltype

 

 

select* from bigtype

delete bigtype where bigtypname=‘买进&卖出‘

TRUNCATE TABLE Smalltype --有外键约束的不能删,方法把外键约束给删了,或者重新建表

 

--先备份,然后先查到记录最后在更新

--对企业数据最重要

--数据库是考察的关键

--办个假证好报名

--对自己有利对别人无害的事可以做

insert into bigtype values(‘不知道‘)

declare @bigid int

select @bigid =@@IDENTITY--系统函数

insert into Smalltype (smalltypname ,bigtypeid )

values(‘gongzi‘,@bigid )

--values(‘gongzi‘,@@IDENTITY)

--在小表中插入数据id是点的id

 

select * from bigtype

select * from Smalltype

 

 

 

insert bigtype

select(smalltypname )from Smalltype

 

select * from bigtype

select * from Smalltype

--柴小表中查数据插入大表

--从Smalltype表中查数据插入bigtype表

use AccountSQL

insert bigtype

select(smalltypname )from Smalltype

 

--从bigtype表中查数据插入Smalltype表

use AccountSQL

insert SmallType

select bigtype.bigtypname,BigType.id from BigType

 

use AccountSQL

insert SmallType

select bigtype.bigtypname,null from BigType

use AccountSQL

insert SmallType

select bigtype.bigtypname,bigtype.bigtypname from BigType

--插入失败,SmallType中第二列外键bigtypeid是int类型,无法将bigtype.bigtypname的varchar类型转化

use AccountSQL

insert SmallType

select null,bigtype.id  from BigType

--插入失败,SmallType中第一列SmallTypeName不能为空

 

 

select * from bigtype

select * from Smalltype

select * from Member

select * from Account

 

use AccountSQL

insert SmallType

select SUBSTRING (bigtype.bigtypname,1,1)+SUBSTRING (bigtype.bigtypname,1,1),BigType.id from BigType

--SUBSTRING是拆分

 

在删除中

--select卡列

--where卡行

 

--use AccountSQL

--select Smalltype.smalltypname as b ,bigtype.bigtypname as g,

--into #aaaaa   join  on

--查询部分数据,并插入到临时表中

use Northwind

select ProductName as products,UnitPrice as pprice,

(UnitPrice *0.1)as tax

into #PriceTable

from Products

select * from  #PriceTable

--使用TOP 限制插入的行

use Northwind

select  top 10  ProductName as products,

UnitPrice as pprice,(UnitPrice *1.1)as tax

into #PriceTable1

from Products

select * from  #PriceTable1

--插入部分数据

use Northwind

insert Shippers (CompanyName )

values (‘fitch&Mather‘)

select * from Shippers

--更新数据

update Shippers

set Phone =‘6666666666‘

WHERE companyname = ‘fitch&Mather‘

SELECT * FROM shippers

WHERE companyname =  ‘fitch&Mather‘

 

insert Shippers (CompanyName )

values (‘aaaa‘)

update Shippers

set Phone =‘987687567‘

WHERE companyname = ‘aaaa‘

 

删除DELETE语句:

 

1,可在 DELETE 语句中加入 WHERE 语句 ,否则将删除所有的行

use Northwind

delete Shippers

where CompanyName =‘fitch&Mather‘ --‘Fitch & Mather‘注意&两边不能有空格

 

2,可使用TOP限制删除的行,

--可以系统变量rowcount删除

set rowcount 2

 delete from Shippers

 set rowcount 0

--也可以根据唯一ID

delete from (select top10 * from A表)b

 

--例子:

--A,后行

--delete from 表明where id in

--(select top 10 id from 表明order by id desc)

--B,前行

--delete from 表明where id in

--(select top 10 id from 表明order by id)

 

3,只删除数据,但不删除结构只清空表用语句TRUNCATE TABLE

USE pubs

select * from jobs

TRUNCATE TABLE jobs  --外键约束不能删除

 

--4,删除基于其他表的行

use mydb2

select * from Table_1

select * from Table_2

--删除的Table_1中的数据,Table_2只是基准表,条件是table_1中列的值和table_2中列的值相同

--只有业务上有某种关系,比如重复和多余等

use mydb2

delete  Table_1 from table_2

where table_1.fsafsa=table_2.dddddd

更新数据:

--一般一主键更新

--有时会用以增加工资等

--注意加上where,否则会全部更新就麻烦了

select*from table_2

update table_2 set dddddd=‘aa‘where dddddd=‘11‘

--更新unitprice字段为原有值的.5倍

use Northwind

select * from products

update products

set unitprice=(unitprice*1.5)

 

表数据操作:

use mydb2

insert table_1( fsafsa)

values (‘a‘),(‘1‘),(‘3‘),(‘c‘)

delete table_1

where fsafsa=‘a‘

select *from table_1

where fsafsa>‘1‘

select *from table_1

where fsafsa>‘a‘--a是它的ASCII码

use Northwind

--优先级NOT>AND>OR

select companyname from customers

where companyname like ‘%Restaurant%‘

USE northwind

select * from customers

USE northwind

SELECT productid, productname, supplierid, unitprice

FROM  products

 WHERE  (productname LIKE ‘T%‘ OR productid = 16)

  AND  (unitprice > 16.00)

 

1,检索一定范围

--要求:检索unitprice在和之间

USE northwind

--包含和

SELECT productname, unitprice

FROM products

where UnitPrice between 10 and 20

--不包含和

SELECT productname, unitprice

FROM products

where UnitPrice >10 and  UnitPrice <20

2,使用值列表作为搜索条件

--要求:检索country字段为Japan或Italy

USE northwind

SELECT companyname, country

FROM suppliers

where Country  in (‘japan‘ ,‘ltaly‘)

3,检索未知值

--fax为null的数据

USE northwind

SELECT companyname, fax

FROM suppliers

WHERE fax IS NULL

排序:

 

1,对数据进行排序

Use Northwind

select * from employees where EmployeeID >5

order by firstname

Use Northwind

select * from employees

order by firstname asc

select * from employees

order by firstname desc

2,消除重复行

USE northwind

SELECT DISTINCT country

 FROM suppliers

 ORDER BY country

select DISTINCT  Country

from Shippers --有时报错问题可能是出在上一级中,比如名字错了

ORDER  by Country,

3,使用TOP n

--返回前n条记录

USE northwind

SELECT TOP 5 productname, unitprice

FROM products

GO

--返回前%的记录

SELECT TOP 5  PERCENT productname, unitprice

FROM products

 

聚合函数:

--1,计算诸如平均值和总和的函数称为聚合函数

--2,使用聚合函数和GROUP BY 子句,能够把表中的记录分组,并对组中数据进行汇总操作

--3,-使用HAVING 子句在分组的同时对字段或表达式指定搜索条件

联合使用 GROUP BY 和 HAVING 子句

--要求:根据productid分组,查询总数量大于的数据

use Northwind

select productid,SUM (quantity)as quantitysum

from [Order Details]

group by ProductID

having SUM (quantity)>500

order by quantitysum

use SAIKOTeachSystemDB

--排序

select top 10  StuName   from Students--显示的和排序标准不要求一样

order by Sex desc--倒序

--消除重复

select distinct sex from Students

select distinct * from Students

--聚合函数,用于分组汇总,数据挖掘

use SAIKOTeachSystemDB

select studentID ,AVG (CAST (ReviewGrade  as float))

from ProjectItemReviews

group by studentID

select *  from ProjectItemReviews

select ItemID  ,AVG (CAST (ReviewGrade  as float)) as avarege

from ProjectItemReviews

group by ItemID

having AVG (CAST (ReviewGrade  as float))>6

--用汇总结果排序不能用where而用having且不识别别名

order by avarege

select *  from ProjectItems  where ItemID =5

                                  

select *  from ProjectItems  where ItemID =5

 

连接:内外完交四种连接

--只要类型匹配就可以连接

--外键还是要设的,防治垃圾数据;关系图做出来后表都是有关联的

--先拿两个表连接,组成一个表在和第三个表连接,组成一个表再和视图连接

--关联的做法是建表时尽量分开,好处是好修改,和程序设计一样,较少耦合度,将表尽量分开也是建表的准则

--面试看你的知识面广不广,有多深

--$你应该相信自己,独立思考,不能总是等老师和受同学影响,自己的掌握的学到自己东西才是自己的,这点你必须要清楚,别人怎么都与你无关,你只能自己努力去弥补

--$你理解力很强,但是却不踏实,怕困难,不敢相信自己,而且不愿意独立思考,而更愿意去学习和接受,且执念太重影响判断情绪太重影响信念,且太容易受到束缚还都是自己给自己上的铰链

--@计算机专业就是看你的经验的,而经验的最好体现就是代码量,而有效地代码量不是去抄代码,而是把代码敲出来放在电脑上运行出来,

--@多在平时生活中分析模型,培养抽象思维,了解业务流程,熟悉编程逻辑,学习数据模型等

Use northwind

select * from products

select * from suppliers

--内部连接,返回的是最小的完全匹配的集合,同时以两个为主,都有的才显示出来

--注意内部连接仅仅返回那些“存在”的字段匹配的记录。

select products.*,suppliers.supplierid

from products

inner join suppliers on products.supplierid=suppliers.supplierid

 

use pubs

select * from authors

select * from titleauthor

select * from titles

--内部连接,主要用这个,即都匹配的才显示出来

select a.au_lname+‘, ‘+a.au_fname as author,t.title

from authors a   --以下a是authors的别名,省略了as

join titleauthor ta on a.au_id=ta.au_id

join titles t on t.title_id=ta.title_id

 

 

Use pubs

select * from discounts

select * from stores

--左侧外部连接,以左侧为主

select discounttype,discount,s.stor_name

from discounts d

left outer join stores s on d.stor_id=s.stor_id

 

Use pubs

select * from discounts

select * from stores

--右侧连接,以右侧为主

select discounttype,discount,s.stor_name

from discounts d

right join stores s on d.stor_id=s.stor_id

 

Use pubs

select * from discounts

select * from stores

--完全连接,左连接和右连接的并集

select discounttype,discount,s.stor_name

from discounts d

full join stores s on d.stor_id=s.stor_id

 

Use pubs

select * from discounts

select * from stores

--交叉连接,笛卡尔积

select discounttype,discount,s.stor_name

from discounts d

cross join stores s

 

子查询:

use Northwind

select * from Customers where CustomerID in

(select distinct CustomerID from orders)

--查找Customers中的数据,以CustomerID为条件,CustomerID在子查询中

--子查询在orders表中查找CustomerID,匹配上面的CustomerID

EXISTS子查询:

use northwind

select * from orders where 

Exists(select *  from customers where customerid=‘alfki‘ )

--EXISTS只需要返回一个真值或假值

--作用是在where子句中测试子查询返回的行是否存在。

--亦即子查询中有返回值则执行父查询

Any子查询:

--Any只要与一个子查询结果运算是真成立

use northwind

select  orderid,freight from orders where Freight

<any(select SUM(UnitPrice )from [Order Details] group by orderid )

--All必须都与子查询的结果运算是真才成立

use northwind

select  orderid,freight from orders where Freight

<all(select SUM(UnitPrice )from [Order Details] group by orderid )

 

类型转换函数:

Cast (Price  as  float)

select convert(varchar,  getdate(),  1)  --一是一哪种版式显示

 

视图、事物、存储过程:

use SAIKOTeachSystemDB

--创建视图的发生过

--视图创建过程和连接查询一样

--可视化创建视图的方式注意添加“分组依据”项,可动态生成代码

--创建学生项目成绩视图(即按项目分别查询每个学生的成绩)

create view v_cjcx

as

select ProjectItems.ItemID,ProjectItems.ItemName,

AVG (cast(ProjectItemReviews.ReviewGrade as float) )as avggrades

from ProjectItemReviews

join ProjectItems  on ProjectItems .ItemID=ProjectItemReviews.ItemID

group by ProjectItems.ItemName ,ProjectItems.ItemID

use SAIKOTeachSystemDB

select *from v_cjcx

select *from v_zcjcx

select *from view_1

select *from view_2

drop view view_2

--创建按评审子项分组的查询均分的视图

create view v_zcjcx

as

select Students.StuID, Students.StuName ,Projects.ProjectName ,

SUM (ProjectItemReviews.ReviewGrade) as sumgrades

from ProjectItemReviews

join ProjectItems  on ProjectItems.ItemID =ProjectItemReviews.ItemID 

join Projects   on Projects.ProjectID =ProjectItems.ProjectID

join Students on Students.StuID =ProjectItemReviews.studentID

group by Students.StuID,Students.StuName , ProjectItems.ProjectID, Projects.ProjectName

create view view_2

as

SELECT     TOP (100) PERCENT dbo.ProjectItems.ItemID, dbo.ProjectItems.ItemName, SUM(dbo.ProjectItemReviews.ReviewGrade) AS sumgrades,

                      AVG(dbo.ProjectItemReviews.ReviewGrade) AS avggrades, MIN(dbo.ProjectItemReviews.ReviewGrade) AS mingrades, MAX(dbo.ProjectItemReviews.ReviewGrade)

                      AS maxgrades, COUNT(dbo.ProjectItemReviews.ReviewGrade) AS countgrades, dbo.ProjectItemReviews.ReviewGrade

FROM         dbo.ProjectItemReviews INNER JOIN

                      dbo.ProjectItems ON dbo.ProjectItemReviews.ItemID = dbo.ProjectItems.ItemID INNER JOIN

                      dbo.Projects ON dbo.ProjectItems.ProjectID = dbo.Projects.ProjectID INNER JOIN

                      dbo.Students ON dbo.ProjectItemReviews.studentID = dbo.Students.StuID

GROUP BY dbo.ProjectItems.ItemID, dbo.ProjectItems.ItemName, dbo.ProjectItemReviews.ReviewGrade

HAVING      (dbo.ProjectItemReviews.ReviewGrade > 4) AND (MIN(dbo.ProjectItemReviews.ReviewGrade) > 7)

ORDER BY avggrades, MIN(dbo.ProjectItemReviews.ReviewGrade) DESC, maxgrades DESC, countgrades DESC

 

--事务

use mydb2

create table stu

(

name varchar(12),

age int,

num int

)

use mydb2

begin transation

begin try

insert into stu values (‘jack1‘,20,1)

insert into stu values (‘jack2‘,25,2)

insert into stu values (‘jack2‘,25,‘aaa‘)

commit transaction

end try

begin catch

print ‘错误‘

rollback transaction

end catch

select* from stu

 

存储过程:

 

存储过程的语法:

--IF……ELSE……

use pubs

declare @pic float

select @pic=sum(price)from titles

if @pic>500

begin

print ‘more 500‘

end

else

begin

print ‘less 500‘

end

--Case 条件

--   when   then

--  ……

--  else 

--end 

use northwind

select top  10 orderid,orderid % 10 as ‘LastDigit‘,

Position=case orderid %10

when 1 then ‘first‘

when 2 then ‘second‘

when 3 then ‘third‘

when 4 then ‘fourth‘

else ‘something else‘

end

from orders

 

--While循环

declare @i int

set @i=1

while @i<10

begin

print @i

set @i=@i+1

end

 

--Waitfor等待后执行

waitfor

delay ‘00:00:10‘

print‘SQL‘

 

waitfor

time ‘19:09‘

print ‘Sql‘

--备份数据库backup

 

--TRY……CATCH……例子

use mydb2

BEGIN TRY

   SELECT 1/0;

   insert into stu values(‘Jack1‘,20, ‘a‘);

END TRY

BEGIN CATCH

    SELECT

        ERROR_NUMBER() AS ErrorNumber,

        ERROR_SEVERITY() AS ErrorSeverity,

        ERROR_STATE() AS ErrorState,

        ERROR_PROCEDURE() AS ErrorProcedure,

        ERROR_LINE() AS ErrorLine,

        ERROR_MESSAGE() AS ErrorMessage;

END CATCH;

--ERROR_NUMBER() 返回错误号。

--ERROR_SEVERITY() 返回严重性。

--ERROR_STATE() 返回错误状态号。

--ERROR_PROCEDURE() 返回出现错误的存储过程或触发器的名称。

--ERROR_LINE() 返回导致错误的例程中的行号。

--ERROR_MESSAGE() 返回错误消息的完整文本。该文本可包括任何可替换参数所提供的值,如长度、对象名或时间。

创建存储过程:

Use pubs

Create procedure MyPRO

As

Select *from authors

--执行存储过程

Exec mypro

--创建有进参存储过程:

use pubs

alter proc MyPRO  --修改存储过程

@name varchar(11)

as

select * from authors where au_fname=@name

 

exec mypro ann

--创建有出参存储过程:

alter proc zhq

@itemid varvhar(14),

@sum int  output

as

select @sum=SUM(ReviewGrade) from  ProjectItemReviews

where ItemID=@itemid

--调用存储过程

declare @s int

exec zhq 5,@s output

print @s

--删除存储过程

drop proc Mypro

--封装重复性任务的方法

--支持用户声明变量、条件执行以及其他编程特性

--视图是一条SQL语句,且没有参数

--存储过程可以组装SQL语句,可以有参数可以有返回值

 

 

 

触发器 :

--创建insert触发器

--建一个日志记录表,用来存放操作的日志

use mydb2

--创建表格

create table Roc

(

  id int identity not null primary key,

  op_name varchar(20),

  op_des varchar(40)

)

--创建触发器

create trigger stu_insert_trig

on stu

after insert

as

begin

 insert into roc values(‘insert‘,‘插入操作‘)

end

--向表格插入数据

insert into stu values(‘张三‘,20,2)

select * from stu

select * from roc

 

 

--创建update触发器

create trigger stu_update_trig

on stu

after update

as

begin

 insert into roc values(‘update‘,‘更新操作‘)

end

--测试语句

update stu set stuname=‘李四‘ where id=2

select * from roc

 

 

--创建delete触发器

create trigger stu_delete_trig

on stu

after delete

as

Begin

 insert into roc values(‘delete‘,‘删除操作‘)

end

--测试语句

delete  stu  where id=2

select * from roc

 

 

--创建instead of触发器

create trigger stu_instead_trig

on stu

instead of insert

as

begin

 insert into stu values(‘无名‘,0,0)

end

--测试语句

insert into stu values(‘张三‘,19,1)

select * from  stu

 

 

--修改,删除,禁用,解禁触发器

alter trigger stu_instead_trig

on stu

instead of insert

as

begin

 insert into stu values(‘真的无名‘,0,0)

End

--删除触发器

drop trigger stu_instead_trig

--禁用触发器

alter table stu

disable trigger stu_insert_trig

--解禁触发器

alter table stu

enable trigger stu_insert_trig

 

 

 

 

 

 

 

 

 

 

笔记整理-数据库语言总结2012-12-2,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。