一、基础

1、说明:创建数据库

CREATE DATABASE database-name

2、说明:删除数据库

drop database dbname

3、说明:备份sql server

--- 创建备份数据的device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dak'
--- 开始备份
BACKUP DATABASE pubs TO testBack
*bak文件在SQLServer 中只需要还原即可;挺好用的。

4、说明:创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only

5、说明:删除新表

drop table tabname

6、说明:增加一个列

Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

7、主键

添加主键: Alter table tabname add primary key(col)
删除主键: Alter table tabname drop primary key(col)

8、索引

创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。

9、视图

创建试图:create view viewname as select statement
删除视图:drop view viewname

10、几个高级查询运算词

A: UNION 运算符

UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。

B: EXCEPT 运算符

EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。

C: INTERSECT 运算符

INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。

注:使用运算词的几个查询结果行必须是一致的。

11、连接

实例
==========================
a表 b表
name sex name age
张三 男 李四 30
李四 女 王五 23
==========================
交叉链接:
张三 男 李四 30
李四 女 王五 23
张三 男 王五 23
李四 女 李四 30 左联结:
selece * from a left join b on a.name=b.name
张三 男 null null
李四 女 李四 30 内链接 selece * from a inner join b on a.name=b.name
李四 女 李四 30 外链接 select * from a full outer join b on a.name=b.name
张三 男 NULL NULL
李四 女 李四 30
NULL NULL 王五 23

12、对数据库进行操作:

分离数据库: sp_detach_db;  附加数据库:sp_attach_db 后接表名,附加需要完整的路径名

如何修改数据库的名称:sp_renamedb 'old_name', 'new_name'

13、存储过程使用事务

CREATE PROCEDURE YourProcedure
AS
BEGIN
SET NOCOUNT ON; BEGIN TRY---------------------开始捕捉异常
BEIN TRAN------------------开始事务
UPDATE A SET A.names = B.names FROM T1 AS A INNER JOIN T2 AS B ON A.id = B.id UPDATE A SET A.names = B.names FROM T1 AS A INNER JOIN T2 AS B ON A.TEST = B.TEST COMMIT TRAN -------提交事务
END TRY-----------结束捕捉异常
BEGIN CATCH------------有异常被捕获
IF @@TRANCOUNT > 0---------------判断有没有事务
BEGIN
ROLLBACK TRAN----------回滚事务
END
EXEC YourLogErrorProcedure-----------记录存储过程执行时的错误信息,自定义
END CATCH--------结束异常处理
END *捕获错误的常用函数 1、ERROR_NUMBER() 返回错误号。 2、ERROR_SEVERITY() 返回严重级别。 3、ERROR_STATE() 返回错误状态号。 4、ERROR_PROCEDURE() 返回出现错误的存储过程或触发器的名称。 5、ERROR_LINE() 返回导致错误的行号。 6、ERROR_MESSAGE() 返回错误消息的完整文本。该文本可包括任何可替换参数所提供的值,如长度、对象名或时间。

二、技巧

--通过t-sql语句来创建约束
--新建一张表:员工信息表
create table Employees(
EmpId int identity(1,1),
EmpName varchar(50),
EmpGender char(2),
EmpAge int,
EmpEmail varchar(100),
EmpAddress varchar(500)
) create table Department(
DepId int identity(1,1) ,
DepName varchar(50)
)
-----------------------手动删除、修改、增加 列-----------------------------------------------
--手动删除一列(删除EmpAddress列)
alter table Employees drop column EmpAddress
--手动增加一列(增加一列EmpAddr varchar(1000))
alter table Employees add EmpAddr nvarchar(1000)
--手动修改一下EmpEmail的数据类型(varchar(200))
alter table Employees alter column EmpEmail varchar(200)
---------------------------------手动增加、修改、删除 约束-----------------------------------
--为EmpId增加一个主键约束
alter table Employees add constraint PK_Employees_EmpId primary key(EmpId)
--非空约束,为EmpName增加一个非空约束 not null(修改列)
alter table Employees alter column EmpName varchar(50) not null
--为EmpName增加一个唯一约束
alter table Employees add constraint UQ_Employees_EmpName unique(EmpName)
--为性别增加一个默认约束,默认为'男'
alter table Employees add constraint DF_Employees_EmpGender default('男') for EmpGender
--为性别增加一个检查约束,要求性别只能是:'男' or '女'
alter table Employees add constraint CK_Employees_EmpGender check(EmpGender='男' or EmpGender='女')
--为年龄增加一个检查约束:年龄必须在-120岁之间,含岁与岁。
alter table Employees add constraint CK_Employees_EmpAge check(EmpAge>=0 and EmpAge<=120) --创建一个部门表,然后为Employee表增加一个DepId列。
alter table Employees add EmpDepId int not null
--为Department表设置主键。主键列是:DepId
alter table Department add constraint PK_Department_DepId primary key(DepId)
--增加外键约束
alter table Employees add constraint FK_Employees_Department foreign key(EmpDepId) references Department(DepId) on delete cascade
--增加外键约束 ,同时 添加级联删除
alter table Employees add constraint FK_Employees_Department foreign key(EmpDepId) references Department(DepId) on delete cascade
--删除单个约束
alter table Employees drop constraint FK_Employees_Department
--一次删除多个约束
alter table Employees drop constraintFK_Employees_Department,CK_Employees_EmpAge,CK_Employees_EmpGender,DF_Employees_EmpGender,UQ_Employees_EmpName
--一次增加多个约束
alter table Employees add
constraint FK_Employees_Department foreign key(EmpDepId) references Department(DepId),
constraint CK_Employees_EmpAge check(EmpAge>=0 and EmpAge<=120),
constraint CK_Employees_EmpGender check(EmpGender='男' or EmpGender='女') ---创建表的同时就为表增加约束
create table Employees(
EmpId int identity(1,1) primary key,
EmpName varchar(50) not null unique check(len(EmpName)>2),
EmpGender char(2) default('男'),
EmpAge int check(EmpAge>0 and EmpAge<120),
EmpEmail varchar(100) unique,
EmpAddress varchar(500) not null,
EmpDepId int foreign key references Department(DepId) on delete cascade
) create table Department(
DepId int identity(1,1) primary key,
DepName varchar(50) not null unique
)

  

---批量更新表
 update #data set insertorupdate_bz ='',insertorupdate_yy =''
 from #data a inner join jc..jcjc_tb_fwxmxx_bz b (nolock)on a.standardCode = b.fwxmxx_bz_bmchr
 and a.serviceitemCode=a.standardCode ---批量删除表
delete jc..jcjc_tb_lczlxmmx  from jc..jcjc_tb_lczlxmmx a inner join #data c on a.lczlxmmx_lczlxmbmchr = c.clinicalProjectCode  --将查询结果插入另一个表   Select distinct a.zyh,a.rycs,a.yzlx,b.yzbh,b.yzxh,b.yzlbbh
 Into #temp_brycy_jbxx
 From zy..dr_yzxx a,zy..dr_yzxm b
 where a.zyh='"+row1.inpNo +"' and a.rycs='"+row1.inpFreq +"'
And a.yzbh = b.yzbh And a.yzlx = b.yzlx

  insert into jc..jcjc_ta_zy (zy_mcchr ,zy_pymchr,zy_sybzchr,zy_echovin_mc,zy_echovin_id )
  select 'ceshi','cs','1','ceshi','11'

  查询结果插入新表
  select * into tableA from tableB where …

  查询结果插入已经存在的表
  insert into tableA
  select * from tableB where…

  查询结果跨数据库
  insert into schemaA.tableA
  select * from schemaB.tableB where…

  查询结果加上新字段插入已经存在的表
  insert into tableA
  select *,NULL from tableB where…

--SQLServer查询排序

  select cast(ROW_NUMBER() OVER ( ORDER BY zy_echovin_id ) as int)+@max as xh ,*

  from (select
  vd_item_define_name as zy_mcchr ,
  vd_item_define_name_pinyin as zy_pymchr ,
  '-1' as zy_sybzchr,
  vd_item_define_name as zy_echovin_mc ,
  id as zy_echovin_id
  from openquery([155ORCL],'select * from METADATA_VD_ITEM where VD_TYPE_ID=''081D829E8BFD45FC9A7C8D358DF43D60''')) a
  where a.zy_echovin_id not in (select zy_echovin_id from jc..jcjc_ta_zy where zy_echovin_id is not null)


Sql Server专题三:SQL操作与技巧的更多相关文章

  1. Sql Server专题:SQL 经典实例

    SQL 经典实例 1.实例表: Student(S#,Sname,Sage,Ssex) 学生表 S#:学号:Sname:学生姓名:Sage:学生年龄:Ssex:学生性别 Course(C#,Cname ...

  2. Sql Server专题一:索引(中)

    写在前面的废话: 索引这个知识点,我前前后后不知道看了多少边,网上的文章五花八门,搞的我晕头转向,搞的牛逼点的就是测试索引带来的好处,还搞一大堆的测试数据出来,有意思吗?MS自己不会测试吗?这样的测试 ...

  3. SQL SERVER数据库 三种 恢复模式

    SQL SERVER 2005 以后三种恢复模式: 简单(Sample),完全(Full),大批量(Bulk_Logged) 完全备份模型 完全备份模式是指在出现数据文件毁坏时丢失数据的风险最小.如果 ...

  4. 对于超大型SQL SERVER数据库执行DBCC操作

    原文:对于超大型SQL SERVER数据库执行DBCC操作 对于数据库维护,主要使用DBCC CHECKDB来实现,以下是对大型数据库的使用说明,小型数据库一般直接使用就可以了: 1.2008(200 ...

  5. 在Sql Server触发器中判断操作是Insert还是Update还是Delete

    在Sql Server触发器中判断操作是Insert还是Update还是Delete DECLARE    @IsInsert bit,    @IsUpdate bit,    @IsDelete  ...

  6. SQL SERVER如何通过SQL语句获服务器硬件和系统信息

    在SQL SERVER中如何通过SQL语句获取服务器硬件和系统信息呢?下面介绍一下如何通过SQL语句获取处理器(CPU).内存(Memory).磁盘(Disk)以及操作系统相关信息.如有不足和遗漏,敬 ...

  7. SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第2部分)

    计划缓存(Plan Cache) 如果SQL Server已经找到一个好的方式去执行一段代码时,应该把它作为随后的请求重用,因为生成执行计划是耗费时间且资源密集的,这样做是有有意义的. 如果没找到被缓 ...

  8. SQL Server 127个SQL server热门资料汇总

      SQL Server 127个SQL server热门资料汇总     最近有许多关于如何学习SQLSERVER的问题,其实新手入门的资源和贴子很多,现在向大家隆重推荐经过精心整理的[SQLSer ...

  9. Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程

    原文:Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程 Red Gate系列之三 SQL S ...

随机推荐

  1. Oracle 向上递归、向下递归

    ---- 向上递归select distinct orgguid,dtb_orgguid,orgname from dtba_organization a start with orgguid = ' ...

  2. 利用raspberry pi搭建typecho笔记(三) typecho nginx sqlite FAQ

    前言 这是一个汇总文,用来总结我在整个配置过程中遇到的各种问题.因为我在解决这些问题的过程中发现,typecho被部署在这种需要完全自己配置的平台上的情况是比较少的,相关的资料也比较少,所以我的解决过 ...

  3. 二维码识别:Halcon与C++中多字节环境下的字节编码格式设置和转换

    Halcon环境下可通过设置set_system(‘filename_encoding’, ‘utf8’),可以将二维码的识别结果解析出汉字. VS环境下则需要将utf8转换成gbk格式.代码如下: ...

  4. 完全跨站点跨域名单点(SSO)同步登录和注销

    先来说说什么是单点登录(SSO).来自百科的介绍:SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主 ...

  5. UVA 10129-Play on Words(欧拉通路)

    题意:给N个单词,判断是否单词首尾(前一个单词的尾字符与后一个单词的头字符相同)相连能否形成一条链. 解析:找欧拉通路(欧拉回路或是欧拉链路),但这题事先需要并查集一下,判断是否只属于一个集合,如aa ...

  6. Java中的native方法

    博客引用地址:Java中的native方法 今天花了两个小时把一份关于什么是Native Method的英文文章好好了读了一遍,以下是我依据原文的理解. 一. 什么是Native Method 简单地 ...

  7. 分治法求一个N个元素数组的逆序数

    背景  逆序数:也就是说,对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时, ...

  8. Sonar入门(一):简介

    什么是Sonar? Sonar是一个开源的代码质量管理平台.它能对代码进行如下7个维度的管理. 使用插件,它可以对20多种语言进行代码质量管理,这其中包括Java,C#,C/C++,PL/SQL等等. ...

  9. 用Python实现九九乘法表

    1.用“#”组成的矩形的实现 代码 eight = int(input("Height:")) #用户输入高度 width = int(input("Width:&quo ...

  10. Hibernate中save、saveorupdate、persist方法的区别

    在Hibernate中,save().saveOrUpdate()和persist()都是用于将对象保存到数据库中的方法,但其中有些细微的差别.例如,save()只能INSERT记录,但是saveOr ...