1, 使用一个数据库之前要引用他:use 数据库名
2, exists()判断子查询的结果是否存在,返回true or false
3, object_id('对象名') 返回该对象名对应的Id,该id存储在sysobjects表中。
4, 建表时自动建立主键约束:create table a(b char(4),c int,constraint 主键名 primary key(c))
或者:create table a(a char(4) cint primary key) 或者:create table a(a char(4) cint constraint 主键名 primary key)
5, 创建索引:create index 索引名 on 表名(字段名)
6, 为一个表添加外键:alter table 表名 add constraint 外键名 foreign key(字段)references 表名(字段)
7, identity(seed,range) 创建一个标识列,与null,not null并列。seed表示种子,即初始值;range表示增长幅度。
8, 局部临时表 #xxx ,只能被当前会话访问,在该会话结束后自动消失。
9, 全局临时表 ##xx , 可以供多个用户使用,在该会话结束后自动消失。
10,为表 添加/修改/删除列 :alter table 表名 add 列名 type/alter column 列名 newtype/drop 列名
11,可以通过多次安装sqlserver为其创建多个实例
12,用系统过程 sp_reZGXX_XM 重新命名表和列:
sp_reZGXX_XM 原表名,新表名
sp_reZGXX_XM "表名.原列名",新列名
13,如果想显示的在identity列中插入值,则需要先设置:set identity_insert 表名 on
插入完毕后最好设置:set identity_insert 表名 off
14, 利用writetext往text 或 image列中写入值:
declare @var varbinary(16)
select @var=textptr(c) from test where a=10
writetext test.c @var 'zhongguo '
注意:使用Writetext,一般需要首先这样设置:sp_dboption 数据库名,'SELECT into/bulkcopy',true
15, truncate table 表名 删除表格的所有数据,速度很快。
16,统计函数中除了count(*) 之外,都忽略空值(null).
17, 由于text和image类型数据很长,在查询之前可以通过设置全局变量textsize来指定返回数据的长度,set textsize 50
如果想查阅全局变量textsize的值:select @@textsize
18, 通过reaDtext 读取text的数据:
declare @var varbinary(16)
select @var=textptr(c) from test where a=10
readtext test.c @var 4 3
此例返回第5,6,7个字符。应为长度要求是3,起始是0,所以4表示从第五个字符读起。
其中textptr是返回指定的text,ntext,image列的指针,一般保存到varbinary类型的变量中
19, like 语句中,可以指定简单的正则表达式,[a-z]表示一个任意字母,[^a-z]表示一个非字母字符
20,like 也是唯一可以在text列上使用的操作符
21,逻辑操作符优先级:NOT > AND > OR
22, 在group by 一个记录集时,所有的null组成一组。
23,带有group by 子句的 select中可以有where子句,但是where 子句必须放在group by 前面。
24,如果group by 子句中用了all,即 group by all xxx ,则不符合检索条件的记录也显示,但不参与统计。
25,having 中,只能包含 group by子句中 指定的列,也可以包含统计函数。where中可指定任何列,但是不能用统计函数
26, having 子句从最终结果中将不满足该条件的分组去掉
27,不带group by子句时也可以使用having子句,并将整个查询结果作为一个组,但是,由于出现在选择列表中的列
和出现在having子句中的列必须是group by 子句中的列,所以,当不带group by子句时,不能在having子句和
选择列表中直接使用列名,只能使用统计函数。
28,当在group by子句后指定order by子句时,只能在order by子句中指定group by子句中的列或者统计函数
29,在进行union运算时,自动删除结果中的重复行,如果使用all选项 ,则可以将所有行显示在结果中:union all
30, 在union时,合并结果集中的列名有第一个查询给出,所以后面进行排旬时一定要注意order by 子句中的字段名
31,可以通过 select fieldslist into 新表名 from 表名,来创建一个新表,并将当前表中的数据全部插入到新
表中,但是做这个操作之前需要保证数据库选项 select into/bulkcopy 设置为true。方法如下:
use master /*设置命令必须在master数据库中进行*/
sp_dboption 数据库a名,"select into/bulkcopy",true /*设置数据库选项*/
use 数据库a名
checkpoint /*使设置结果生效*/
如果要将统计结果或者计算结果插入到新表中,必须以标题的形式给出列名,如:
select a,b=avg(c) into mm from nn group by a
32, 随即取出N条记录的方法:select top N * from 表名 order by newid()
33,创建唯一约束:create table a(b int not nul constraint 约束名 unique,c char(10) null)
或者:create table a(b int,c char(10),constraint 约束名 unique(b))
34,在sql server表格选定一个单元格,ctrl+0即可将单元格的值置为null
35,为变量赋值方法:set @xxx=??? ,如果变量的值取自一个查询的话,需要用select, 如:select @xxx=??? from ??? where ????
如果要返回一个记录集,但是不是从一个表格,而是全部是系统变量或自定义变量组成。则不必写from子句:select ??,??,??
36,创建一个返回一张表的函数:
create function fn_Tree(@Id int)
returns table @tb (id int ,fid int)
as
begin
insert @tb select id,fid from tablename where fid=@id
while exists (select 1 from tablename where fid in (select id from @tb)
and id not in (select id from @tb) )
insert @tb select id,fid from tablename where fid in (select id from @tb)
and id not in (select id from @tb)
return
end
表的字段为id,fid
insert @tb select 语句,将查询结果插入到当前的表格(@tb)中
调用:
select * from dbo.fn_Tree(0)
go
select * from dbo.fn_Tree(1
go
37,一个日期格式转换的例子,一般可以用convert,cast等函数转换,但是这个例子没有:
declare @a varchar(50)
declare @b varchar(50)
declare @c int
declare @d varchar(50)
declare @e varchar(50)
set @a='1/20/03 10:06:41:59'
set @b=reverse(@a)
set @c=charindex('/',@b)
set @d=stuff(@b,@c,0,'02')
set @e=reverse(@d)
select @a,@b,@c
select @d,@e