一、基础

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. 【4】项目结构+基本的Tornado服务

    项目地址: Blog 简单的tornado服务分支: simple 项目结构 创建对应的文件夹并测试一个最简单的功能 main.py #!/usr/bin/env python # coding:ut ...

  2. Java中操作时间比较好用的类

    项目中经常用到日期的操作,包括日期的格式化.下面是几个比较常用的工具类. import java.text.SimpleDateFormat; import java.util.Date; impor ...

  3. 1007 Numerical Summation of a Series

    简单入门题.按照题目给的指导编程,算多少数要理解题意. #include <stdio.h> int main(){ int k,ssx; double x,psix; ;ssx<= ...

  4. mysql 在启动时配置文件的查找方式

    知识储备: 1.mysql在启动时会去多个地方找它的配置文件,当然啦这些也都是可以从帮助中找到的,问题在于我们要知道怎么找到对应的帮助才行啊 实战: [root@workstudio data]# m ...

  5. 源码编译安装 PHP5.5.0,解决curl_exec访问HTTPS返回502错误的问题(修改PATH路径)

    最近碰到一个奇怪的问题, PHP使用 curl_exec 访问 HTTPS 网页时, 返回502错误, 访问HTTP网页时没有问题,  用   echo   phpinfo() ;  查看, 支持op ...

  6. Linux系统编程(6)——文件系统

    计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数 ...

  7. B-JUI(Best jQuery UI) 前端框架

    From :http://b-jui.com/大略看了下还不错,收藏之.

  8. UESTC_基爷的中位数 2015 UESTC Training for Search Algorithm & String<Problem D>

    D - 基爷的中位数 Time Limit: 5000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  9. UESTC_秋实大哥与战争 2015 UESTC Training for Data Structures<Problem D>

    D - 秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Subm ...

  10. Plus One 解答

    Question Given a non-negative number represented as an array of digits, plus one to the number. The ...