常用SQL语句

create table tableName(
    columnName nvarchar(20) not null default'默认值',
    columnName1 nvarchar(20) null,
    columnName2 int identity(1,1)--创建自增长字段
    CONSTRAINT PK_TableName PRIMARY KEY(columnName),
    CONSTRAINT UK_TableName UNIQUE (columnName),
    /*Checks*/
    CHECK (columnName>0)
)
创建表

 

drop table tableName
删除表

 

alter table [dbo].[tableName] 
add columnName nvarchar(20) not null;
为表增加字段

 

alter table [dbo].[tableName] 
add constraint PK_tableName primary key(columnName);
-- alter table tableName add primary key (columnName);

alter table [dbo].[tableName] 
add constraint UK_tableName UNIQUE (columnName);
--alter table tableName add UNIQUE (columnName);
为表增加主键/唯一键

 

alter table [dbo].[tableName] 
alter column columnName nvarchar(20);
修改字段类型

 

alter table tableName [WITH NOCHECK]
ADD CONSTRAINT <约束名> FOREIGN KEY (<字段>)
REFERENCES <引用的表名>(<字段>)
[ON ];
--WITH NOCHECK:如果增加约束时不需要对现有的数据进行约束检查,可选用此项;
-- NO ACTION:当父表中的行被更新(删除)时,则产生错误,并撤销对数据的操作。
-- CASCADE: 当父表中的行被更新(删除)时,同时更新(删除)子表中相依赖的行
-- SET NULL:当父表中的行被更新(删除)时,将子表中相依赖行中相应字段的数据设为空。
-- SET DEFAULT:同上;
[]:可选 <>:必选
约束(外键)

 

ALTER TABLE tableName [WITH NOCHECK]
ADD CONSTRAINT <约束名> CHECK (<check_condition>);
--alter table employee WITH NOCHECK 
  ADD CONSTRAINT check_age
  CHECK(age>18);
约束(check检查)

 

关闭:alter table tableName NOCHECK CONSTRAINT checkName;  
删除:alter table tableName DROP CONSTRAINT checkName;
--修改字段名:
execute sp_rename 'dbo.tableName.columnName_old','columnName_new'
关闭约束/删除约束

 

alter table tableName
drop column columnName
删除字段

 

CREATE INDEX<index_name> ON tableName (columnName[,cloumnName1]);
创建索引

 

DROP INDEX <index_name> ON tableName
删除索引

 

select name,age,sex=case when sex='F' then '' when sex='M' then '' end from PEOPLE_TEST

select name,age,sex=case sex when'F' then '' when 'M' then '' end from PEOPLE_TEST


--下面两句,可以看到,select 的字段最终是在end关键字后面定义的
case when (select CAST(B.Cdt as decimal)-CAST(B.Odt as decimal))>0 then left(B.Cdt, 4)+ '-' + SUBSTRING(B.Cdt, 5, 2)+ '-' + SUBSTRING(B.Cdt, 7, 2)+ ' ' + SUBSTRING(B.Cdt, 9, 2)+ ':' + SUBSTRING(B.Cdt, 11, 2)+ ':' + right(B.Cdt, 2) else GETDATE() end as cdt1,

case B.odt when '0' then '0' else left(B.Odt, 4)+ '-' + SUBSTRING(B.Odt, 5, 2)+ '-' + SUBSTRING(B.Odt, 7, 2)+ ' ' + SUBSTRING(B.Odt, 9, 2)+ ':' + SUBSTRING(B.Odt, 11, 2)+ ':' + right(B.Odt, 2) end as odt1, 
使用case函数进行查询

 

<create|alter> procedure schemaName.procedure_Name 
[<@参数> <数据类型> [=默认值] [out|output],]
[<@参数1> <数据类型> [=默认值] [out|output]]
AS
  [declare <@变量名> <数据类型>[=默认值];]
  [declare <@变量名1> <数据类型>[=默认值]]
[begin]
    sql_statement
[end]

--例:
create procedure myTest.MatOut
    @matNo varchar(50),
    @Qty numeric,
    @Msg varchar(100) output
as
  --定义变量:物料的库存量
  declare @stockQty numeric;
begin
  --给变量@Msg赋值
  set @Msg='领料出库的业务逻辑';
end;
存储过程

 

EXEC procName 'para1','para2','para3'
执行存储过程

 

--1、DML触发器:(AFTER 触发器不能在视图上使用的)
create trigger triggerName
on <tableName|viewName>
   <instead of|after|for><insert|update|delete>
as 
begin
     sql_statement
end;

--例:
create trigger T_addNum
on 学生信息
for insert
as 
update 班级信息 set 班级人数=班级人数+1
where 班级编号=select  所在班级 from inserted)

--2、DDL触发器
create trigger triggerName
ON  SERVER|DATABASE>
WITHLNCRYPTION
<FOR|AFTER><drop_table|alter_table|create_table>

--例:
create trigger T_notdelete
on database
 for drop _table,alter_table//drop 和修改(触发事件的类型)
as
print'事物不能被处理,基础数据表不能被修改和删除'
rollback 回调

--删除触发器
drop  trigger triggerName

--禁用触发器
disable trigger triggerName on tableName

--启用触发器
enable trigger triggerName on tableName

--重命名触发器
sp_rename 'triggerName_old','triggerName_new'
创建触发器

 

--创建视图(只能写select语句,并且一个视图只能写一个select语句)
CREATE VIEW viewName as <select statement>;

-- 更新视图(条件:1、视图必须未涉及连接。2、视图必须不包含Group by 子句。3、不能使用distinct子句。4、where 子句不能包含表的嵌套引用)
update viewName set age=age+1 where studentID='080808'

--修改视图
alter view viewName as select_statement

--删除视图
drop view viewName
视图

 

--创建临时表:(一个#说明是局部临时表,两个#说明是全局临时表)
create table #temp_stu(    
    name nvarchar(20),
    num nvarchar(20)    
)
--删除临时表:drop table #temp_stu

--创建临时表(2):temp_stu1,查询people_test中的数据,并将数据插入到temp_stu1中去
select name,age into #temp_stu1 from  PEOPLE_TEST
临时表

 

你可能感兴趣的:(常用SQL语句)