定时备份操作:
管理->维护计划->备份数据库任务->子计划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