SqlServer补充

一、数据库和表的操作

1、其他

1.1、备份表

select * into table2 from table1

说明:表table1已经存在,table2不存在。当需要对table1测试时,可以先备份表table1,执行完上述SQL之后,会复制table1的结构和数据到table2。

1.2、表1数据复制到表2(表2已存在)

insert into table2 select * from table1

2、sql分页

2.1、分页查询1

  declare @pageIndex int
  set @pageIndex = 1
  declare @pageSize int
  set @pageSize = 5

  select top (@pageSize) *
  from person
  where id not in
		(select top (@pageSize*(@pageIndex-1)) id from person order by id)

2.2、分页查询2

  declare @pageIndex int
  set @pageIndex = 2
  declare @pageSize int
  set @pageSize = 5

  select top (@pageSize) *
  from (select ROW_NUMBER() over(order by id) as ord,*  from person) a
  where ord >(@pageSize*(@pageIndex-1))

2.3、分页查询3

  declare @pageIndex int
  set @pageIndex = 1
  declare @pageSize int
  set @pageSize = 5

  select *
  from person
  order by id
  offset (@pageSize*(@pageIndex-1)) rows    --从多少条+1开始
  fetch next (@pageSize) rows only            --查询多少条

3、递归查询

也叫层级查询,类似于内查询,本质是查询树形结构

  --递归查询
  CREATE TABLE Employees (  
    ID INT PRIMARY KEY,  
    Name NVARCHAR(100),  
    ManagerID INT NULL FOREIGN KEY REFERENCES Employees(ID)  
); 

INSERT INTO Employees (ID, Name, ManagerID) VALUES  
(1, 'John Doe', NULL),  
(2, 'Jane Smith', 1),  
(3, 'Bob Johnson', 1),  
(4, 'Alice Brown', 2),  
(5, 'Charlie Davis', 3); 

select * from Employees
go


-- 递归查询获取每个员工的经理链  
WITH Temp as (
		select id empId, name empName, managerId managerId, cast(null as nvarchar(100)) managerName
		from employees
		where managerId is null
		union all
		select a.id empId, a.name empName, a.ManagerID managerId, b.empName managerName
		from employees a inner join Temp b on a.managerId = b.empId
)
select * from Temp order by empId

4、数据类型

4.1、uniqueidentifier类型(Guid)

通过使用newid()函数

select newid()

5、索引

5.1、索引

5.1.1、索引概述

整个表的数据被分成一个个的数据页,数据页之间相连通,类似链表,索引就是通过数据页查询的,所以快

6、数据库误操作恢复

1、

发生灾难前

第一步:数据库-属性-选项-恢复模式设置为:完整

第二步、至少做一次完整备份

第三步、做一次事务日志尾部备份

7、事务

7.1、事务分类

7.1.1、显式事务

用begin transaction开启事务,由commit transaction提交事务,由rollback transaction回滚事务

7.1.2、隐式事务

通过设置 set implicit_transactions on 语句,将隐式事务模式设置为打开。当以隐式事务模式操作时,不必使用 begin transaction 开启事务,当一个事务结束后,这个模式会自动启用下一个事务。只需使用 commit transaction 提交事务或 rollback transaction 回滚事务即可。

7.1.3、自动提交事务

SQL Server的默认模式,它将每条单独的T-SQL语句视为一个事务。如果成功执行,则自动提交,否则回滚。

二、存储过程

1、概述:

1.1、定义:存储过程(procedure)是一组为了完成特定功能的SQL语句的集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行

1.2、优缺点(自己网上找)

1.3、常见存储过程

exec sp_databases;查看所有数据库

exec sp_helpdb;查询数据库信息

exec sp_helpdb 数据名;查询指定数据库信息

exec sp_renamedb‘旧库名’,‘新库名’;更改数据库名称

exec sp_tables;查询当前数据库的所有表

exec sp_columns 表名;查看列

exec sp_help 表名;返回表的所有信息

exec sp_helpIndex 表名;查看索引

exec sp_helpConstraint 表名;约束

exec sp_stored_procedures;当前环境的所有存储

exec sp_helptext‘存储过程’;查看存储过程源码

exec sp_rename‘旧名’,‘新名’;修改表、索引、列的名称

exec sp_defaultdb‘旧库名’,‘新库名’;更改登录名的默认数据库注意:

exec 用于调用存储过程

2、存储过程操作

2.1、创建存储过程

create procedure 存储过程名
		@参数1 数据类型,
		@参数2 数据类型 output    --output表示输出值(返回值)

as    
begin
	SQL语句	
end

修改则把create换成alter即可

2.2、删除

drop procedure 存储过程名

2.3、调用存储过程

exec 存储过程名;        ---不带参数调用
exec 存储过程名 参数1, 参数2 ;    ---带参数调用

2.4、查看存储过程

exec sp_helptext 存储过程名

PPT:

https://pan.baidu.com/s/163EH1ew5uA491ThoN_bkNQ?pwd=6666 
提取码:6666

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值