# 自定义函数
标量函数
返回单一值内嵌表值函数
返回列表多声明表值函数
返回自定义结构的表
# 事务设置方式
begin tran
--sql语句1
if @@error<>0
begin
rollback tran
return --这里除了return跳出,也可以使用goto+标签跳出事务
end
--sql语句2
if @@error<>0
begin
rollback tran
return
end
commit tran
# 自增设置
//表主键自增重置从0开始
DBCC CHECKIDENT('TABLE_NAME',RESEED,0);
//设置主键自增长
create table test(
Id int primary key identity(101,2),
Name varchar(50)
);
//修改某列为自增
//sqlserver如果建表的时候不设自增,之后是没法直接修改的,需要先删再重设
alter table 表名 drop column ID
alter table 表名 add ID int identity(1,1)
# 查询重复数据
select name from test group by name having count(name) > 1
# 索引
创建索引的标准:用语频繁搜索的列,用语对数据进行排序的列
- 唯一索引(UNIQUE):不允许两行具有相同的索引值(创建了唯一约束,系统将自动创建唯一索引),只能对定义为 NOT NULL 的列创建唯一索引
- 主键索引:主键索引要求主键中的每个值是唯一的,(创建主键自动创建主键索引)
- 聚集索引(CLUSTERED):表中各行的物理顺序与键值的逻辑(索引)顺序相同,表中只能包含一个聚集索引,主键列默认为聚集索引
- 非聚集索引(NONCLUSTERED):表中各行的物理顺序与键值的逻辑(索引)顺序不匹配,表中可以有249个非聚集索引
//创建索引
create index index_name on table_name (cloumn_name) //创建普通索引
create clustered index index_name on table_name (cloumn_name) //创建聚簇索引
create nonclustered index index_name on table_name (cloumn_name) //非聚簇索引
create unique index index_name on table_name(cloumn_name) //创建唯一索引
//删除索引
DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY
//前两条语句是等价的,删除掉table_name中的索引index_name
//第3条语句只在删除PRIMARY KEY索引时使用,因为一个表只可能有一个PRIMARY KEY索引,因此不需要指定索引名
//如果没有创建PRIMARY KEY索引,但表具有一个或多个UNIQUE索引,则将删除第一个UNIQUE索引
# 外键约束
// 在新表中创建外键约束
CREATE TABLE Sales.TempSalesReason
(
TempID int NOT NULL,
Name nvarchar(50),
-- 主键约束; CONSTRAINT 约束; PK_TempSales 主键约束别名
CONSTRAINT PK_TempSales PRIMARY KEY NONCLUSTERED (TempID),
-- 外键约束; TempID 外键字段
CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
-- Sales.SalesReason (SalesReasonID) 外键引用字段
-- 外键引用字段必须为主键或候选键
REFERENCES Sales.SalesReason (SalesReasonID)
-- 确保修改外键引用字段的值时会同步更改外键字段的值
ON DELETE CASCADE
ON UPDATE CASCADE
)
//在已存在的表内添加外键约束
ALTER TABLE Sales.TempSalesReason
-- FK_TempSales_SalesReason 外键约束别名
ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
-- Sales.SalesReason (SalesReasonID) 外键引用字段
-- 外键引用字段必须为主键或候选键
REFERENCES Sales.SalesReason (SalesReasonID)
-- 确保修改外键引用字段的值时会同步更改外键字段的值
ON DELETE CASCADE
ON UPDATE CASCADE
# 游标
declare @column1 varchar(50)=''
declare @column2 varchar(50)=''
declare @column3 varchar(50)=''
declare @cursonExist int=0
declare cursorName cursor for
select column1,column2,column3 from table where 1 = 1 order by column1
open cursorName--打开游标
fetch next from cursorName into @column1,@column2,@column3
while @@fetch_status = 0
begin
--循环遍历每一条记录,这里写业务逻辑
fetch next from cursorName into @column1,@column2,@column3
end
close cursorName
deallocate cursorName
--删除使用的游标
select @cursonExist=count(1) from MASTER.dbo.syscursors where cursor_name='cursorName'
if (@cursonExist>0) deallocate cursorName
← MongoDB PostgreSQL →