首页 > 代码库 > SQLServer语句 汇总

SQLServer语句 汇总

SQL Server语句
序号功能语句
1创建数据库(创建之前判断该数据库是否存在)if exists (select * from sysdatabases where name=‘databaseName‘)
drop database databaseName
go
Create DATABASE databasename
2删除数据库drop database databasename
3备份数据库USE master
EXEC sp_addumpdevice ‘disk‘, ‘testBack‘, ‘c:\mssql7backup\MyNwind_1.dat‘
BACKUP DATABASE pubs TO testBack
4创建新表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
5根据已有表创建新表1、use 原数据库名  
go
select * into 目的数据库名.dbo.目的表名 from 原表名(使用旧表创建新表)
2、create table tab_new as select col1,col2… from tab_old definition only
6创建序列create sequence SIMON_SEQUENCE
minvalue 1 -- 最小值
maxvalue 999999999999999999999999999 -- 最大值
start with 1 -- 开始值
increment by 1 -- 每次加几
cache 20;
7删除新表drop table tabname
8增加一个列Alter table tabname add colname coltype
alter table tablename add column_b int identity(1,1)
9删除一个列Alter table tabname drop column colname
10修改一个列ALTER TABLE 表名 ALTER COLUMN 字段名 varchar(30) NOT NULL
DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
11添加主键Alter table tabname add primary key(col)
12删除主键Alter table tabname drop primary key(col)
13创建索引create [unique] index idxname on tabname(col…。)
14删除索引drop index idxname on tabname
15创建视图create view viewname as select statement
16删除视图drop view viewname
17选择数据记录sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"
sql="select * from 数据表 where 字段名 like ‘%字段值%‘ order by 字段名 [desc]"
sql="select top 10 * from 数据表 where 字段名=字段值 order by 字段名 [desc]"
sql="select top 10 * from 数据表 order by 字段名 [desc]"
sql="select * from 数据表 where 字段名 in (‘值1‘,‘值2‘,‘值3‘)"
sql="select * from 数据表 where 字段名 between 值1 and 值2"
注:like中"%"匹配0个或多个字符;like中"_"匹配一个字符
18更新数据记录sql="update 数据表 set 字段名=字段值 where 条件表达式"
sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"
19删除数据记录sql="delete from 数据表 where 条件表达式"
sql="delete from 数据表" (将数据表所有记录删除)
20添加数据记录sql="insert into 数据表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)"
sql="insert into 目标数据表 select * from 源数据表" 
(把源数据表的记录添加到目标数据表)
21数据记录统计函数AVG(字段名) 得出一个表格栏平均值
COUNT(*;字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加
引用以上函数的方法:
sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"
set rs=conn.excute(sql)
用 rs("别名") 获取统计的值,其它函数运用同上。
22查询去除重复值select distinct * from table1
23查询数据库中含有同一这字段的表select name from sysobjects 
where xtype = ‘u‘ and id in(select id from syscolumns where name = ‘s3‘)
24只复制表结构select * into a from b where 1<>1
select top 0 * into b from a
25复制内容set identity_insert aa ON
insert into aa(Customer_ID, ID_Type, ID_Number) 
select Customer_ID, ID_Type, ID_Number from TCustomer;
set identity_insert aa OFF
26UNION 运算符(使用运算词的几个查询结果行必须是一致的)UNION 运算符通过组合其他两个结果表(例如TABLE1 和TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随UNION 一起使用时(即UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自TABLE1 就是来自TABLE2。
27EXCEPT 运算符EXCEPT 运算符通过包括所有在TABLE1 中但不在TABLE2 中的行并消除所有重复行而派生出一个结果表。当ALL 随EXCEPT 一起使用时(EXCEPT ALL),不消除重复行。
28INTERSECT 运算符INTERSECT 运算符通过只包括TABLE1 和TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当ALL 随INTERSECT 一起使用时(INTERSECT ALL),不消除重复行。
29left (outer) join左外连接(左连接):结果集既包括连接表的匹配行,也包括左连接表的所有行。
30right (outer) join右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
31full/cross (outer) join全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
32判断临时表是否存在if object_id(‘tempdb..#临时表名‘) isnot null
drop table#临时表名
33判断列是否自增列if columnproperty(object_id(‘table‘),‘col‘,‘IsIdentity‘)=1
print ‘自增列‘
else
print ‘不是自增列‘
SELECT* FROM sys.columns WHERE object_id=OBJECT_ID(‘表名‘)
AND is_identity=1
34判断表中是否存在索引if exists(select * from sysindexes  
          whereid=object_id(‘表名‘) and name=‘索引名‘)
print ‘存在‘  else  print ‘不存在
35betweenbetween为查询某字段的指定范围,限制查询数据范围时包括了边界值
not between不包括边界值
36删除主表没有的信息两张关联表delete from table1 
where not exists ( select * from table2 where table1.field1=table2.field1)
37随机取出10条数据select top 10 * from tablename order by newid()
38初始化表TRUNCATE TABLE table1
391=1,1=2的使用where 1=1”是表示选择全部;“where 1=2”全部不选
40收缩数据库重建索引:
DBCC REINDEX
DBCC INDEXDEFRAG
收缩数据和日志:
DBCC SHRINKDB
DBCC SHRINKFILE
41压缩数据库dbcc shrinkdatabase(dbname)
42转移数据库给新用户以已存在用户权限exec sp_change_users_login ‘update_one‘,‘newname‘,‘oldname‘
go
43检查备份集RESTORE VERIFYONLY from disk=‘E:\dvbbs.bak‘
44修复数据库Alter DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB(‘dvbbs‘,repair_allow_data_loss) WITH TABLOCK
GO
Alter DATABASE [dvbbs] SET MULTI_USER
GO
45分组:Group by一张表,一旦分组 完成后,查询后只能得到组相关的信息。
组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)
在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据
在selecte统计函数中的字段,不能和普通的字段放在一起;
46修改数据库名称sp_renamedb ‘old_name‘, ‘new_name‘
47在线视图查询select * from (SELECT a,b,c FROM a) T where t.a > 1;
48更改某个表exec sp_changeobjectowner ‘tablename‘,‘dbo‘
49按姓氏笔画排序Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as //从少到多
50数据库加密select encrypt(‘原始密码‘)
select pwdencrypt(‘原始密码‘)
select pwdcompare(‘原始密码‘,‘加密后密码‘) = 1--相同;否则不相同
select pwdencrypt(‘原始密码‘)
select pwdcompare(‘原始密码‘,‘加密后密码‘) = 1--相同;否则不相同
51查看硬盘分区EXEC master..xp_fixeddrives
52比较A,B表是否相等if (select checksum_agg(binary_checksum(*)) from A)
=(select checksum_agg(binary_checksum(*)) from B)
print ‘相等‘
else  print ‘不相等‘
53杀掉所有的事件探察器进程DECLARE hcforeach CURSOR GLOBAL FOR SELECT ‘kill ‘+RTRIM(spid) FROM master.dbo.sysprocesses
WHERE program_name IN(‘SQL profiler‘,N‘SQL 事件探查器‘)
EXEC sp_msforeach_worker ‘?‘
54N到M条记录(要有主索引ID)Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc
55查看与某一个表相关的视图、存储过程、函数select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like ‘%表名%‘
56不同服务器数据库之间的数据操作//--创建链接服务器
exec sp_addlinkedserver ‘ITSV ‘, ‘ ‘, ‘SQLOLEDB ‘, ‘远程服务器名或ip地址 ‘
exec sp_addlinkedsrvlogin ‘ITSV ‘, ‘false ‘,null, ‘用户名 ‘, ‘密码 ‘
--查询示例
select * from ITSV.数据库名.dbo.表名
--导入示例
select * into 表 from ITSV.数据库名.dbo.表名
--以后不再使用时删除链接服务器
exec sp_dropserver ‘ITSV ‘, ‘droplogins ‘
57连接远程/局域网数据(openrowset)//--1、openrowset
--查询示例
select * from openrowset( ‘SQLOLEDB ‘, ‘sql服务器名 ‘; ‘用户名 ‘; ‘密码 ‘,数据库名.dbo.表名)
--生成本地表
select * into 表 from openrowset( ‘SQLOLEDB ‘, ‘sql服务器名 ‘; ‘用户名 ‘; ‘密码 ‘,数据库名.dbo.表名)
--把本地表导入远程表
insert openrowset( ‘SQLOLEDB ‘, ‘sql服务器名 ‘; ‘用户名 ‘; ‘密码 ‘,数据库名.dbo.表名)
select *from 本地表
--更新本地表
update b set b.列A=a.列A
from openrowset( ‘SQLOLEDB ‘, ‘sql服务器名 ‘; ‘用户名 ‘; ‘密码 ‘,数据库名.dbo.表名)as a inner join 本地表 b  on a.column1=b.column1
58连接远程/局域网数据(openquery)//--openquery用法需要创建一个连接
--首先创建一个连接创建链接服务器
exec sp_addlinkedserver ‘ITSV ‘, ‘ ‘, ‘SQLOLEDB ‘, ‘远程服务器名或ip地址 ‘
--查询
select * FROM openquery(ITSV, ‘SELECT * FROM 数据库.dbo.表名 ‘)
--把本地表导入远程表
insert openquery(ITSV, ‘SELECT * FROM 数据库.dbo.表名 ‘) select * from 本地表
--更新本地表
update b set b.列B=a.列B
FROM openquery(ITSV, ‘SELECT * FROM 数据库.dbo.表名 ‘) as a
inner join 本地表 b on a.列A=b.列A
59连接远程/局域网数据(opendatasource)//--3、opendatasource/openrowset
SELECT * FROM opendatasource( ‘SQLOLEDB ‘, ‘Data Source=ip/ServerName;User ID=登陆名;Password=密码 ‘ ).test.dbo.roy_ta
--把本地表导入远程表
insert opendatasource( ‘SQLOLEDB ‘, ‘Data Source=ip/ServerName;User ID=登陆名;Password=密码 ‘).数据库.dbo.表名  select * from 本地表
60自定义数据类型EXEC sp_addtype birthday, datetime, ‘NULL‘