sql server

 

 

 

 

各数据库数据类型

ANSI  SQL

SQL Server

MySql

Oracle 10

character

char

char

char

character varying

varchar

varchar

varchar

National character

nchar

char

nchar

National character

varying

nvarchar

varchar

nvarchar

Integer

int

int

int

Smallint

smallint

smallint

smallint

Real

rael

real

real

Decimal

decimal

decimal

decimal

Date

date time

date

date

Time

date time [W1]

time

date

 

 

SQL Server 本身不支持正则表达式

M ysql auto_increment   相当于 SQL Server ..indentity(1,1) [W2]

//在数据库应用,我们经常要用到唯一编号,以标识记录。在MySQL中可通过数据列的AUTO_INCREMENT属性来自动生成。

 

 

连接列区别

SQL Server、Access

select firstname + ' ' + lastname as fullname from ...

MySql

select CONCAT( MemberId,firstname ,lastname ) from ...

Oracle .DB2

select firstname || ' ' || lastname as fullname from ...

 

修改列区别

Oracle 、MySql

alter table Mytable

Modify Column2 varchar(20) Not Null

 

mysql 如果要改列名,用change

      alter  table 表名

      change  已有列名 新列名 新的列定义

其他

alter table Mytable

alter column Column2 varchar(20) Not Null

 

SQL Server为每个独立的SQL语句都提供了隐含的事务控制,使得每个DML的数据操作得以完整提交或回滚,但是SQL Server还提供了显式事务控

事务可以嵌套

事务 区别

SQL Server、MySql

begin transaction ... commit [W3]

MySql 其他

commit [W4] ...   commit

 

重命名表区别

SQL Server

EXEC sp_rename ' ',' ' [W5]

MySql

rename table  tbl_name to   new_tbl_name [W6]

如果要改列名,用 change

      alter  table 表名

      change  已有列名 新列名 新的列定义

Oracle

alter table xx rename to yy [W7]

 

注释

SQL Server

用‘- -’关联到本行末尾

跨越多行注释/*  */

Oracle

用‘- -’关联到本行末尾

跨越多行注释/*  */

MySql

用‘#’字母直到本行结束

用‘- -’关联到本行 末尾 (符号后面要加个空格)

跨越多行注释/*  */

 

存储

SQL Server

create procedure 存储名 .... . exec 存储名 [W8]

执行存储过程时,区分大小写 [W9]

Oracle

 

MySql

create procedure 存储名 ( ) .... .  call 存储名 ( )

 

创建 临时表:

CREATE TABLE #t(x INT PRIMARY KEY)

CREATE   TABLE  ##Globals         -- 执行并重启Sql Server后,全局临时表##Globals会自动重建并一直持续到被显式删除。

 

 

 

Sql server 2005 快捷操作:

 

生成更改脚本

更改类型--生成表

右键--在编辑器中设计查询

打开模板  查询--指定模板参数值--创建自定义模板

视图--其他窗口--web 浏览器

查询--显示估计的执行计划 ctrl+L

数据收缩,分离

 

数据库 右键 任务  生成脚本

 

 

 

 

 

自动化管理:

 

使用本地系统账户不允许使用网络上的其他SQL SERVER,即无法执行多服务器作业

SQL SERVER Agent 服务---选择一个域用户

管理节点--维护计划

SQL SERVER 代理(展开)    创建    作业

                                                     警报

sql server2005 创建作业 计划任务

一个数据库维护计划就是一个作业,而作业是在SQL SERVER代理中的,

其实维护计划就是一些常用 作业 的向导         

 

用户定义的错误事件警报,错误号从5001开始

 

 

主数据文件 MDF

辅助数据文件 NDF

事务日志文件 LDF

 

注意:新数据库是Model 的副本

 

外模式     模式 [W10]       内模式

 

数据页面结构:

Page header( 页头 ) [W11]

Date row1

Date row2

Date row3

......

 

 

Free space

 

堆:

没有群集索引的表

主键索引:

定义一个主键将自动创建主键索引

主键索引是唯一索引的特殊类型

对架构添加索引会增加数据库的开销,因为索引需要持续的维护。

索引: 非聚集 索引, 聚集 索引。         ( sql server 2005还支持惟一索引 [W12] ,索引视图,全文索引,XML                                                                 索引)

一个表只能有一个 聚集索引

聚集 索引和 非聚集 索引 的根本区别是表记录的排列顺序和与索引的排列顺序是否一致, [W13] 创建聚集索引

聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。
聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。建议使用聚集索引的场合为:
  a.此列包含有限数目的不同值;
  b.查询的结果返回一个区间的值;
  c.查询的结果返回某值相同的大量结果集。
    非聚集索引 指 定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致,聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实 际的数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。非聚集索引比聚集索引层次多,添加记录不会引起数据顺序的重组。建议使用 非聚集索引的场合为:
  a.此列包含了大量数目不同的值;
  b.查询的结束返回的是少量的结果集;
  c.order by 子句中使用了该列。

 

索引视图: 索引视图可通过以下方式提高查询性能:         [W14]

可预先计算聚合并将其保存在索引中,从而在查询执行时,最小化高成本的计算。

可预先联接各个表并保存最终获得的数据集。

可保存联接或聚合的组合。

索引视图还具有使用标准索引不能获得的其它性能优点

 

文件组织: [W15]

堆文件 (无序的文件,善于插入大批量数据,存取和删除一条记录必须线性查找,实删除的记录空间不可再用)

有序文件 (可以根据一个或多个字段的值来排序,二分查找,善于查找数据)

哈希文件

 

 

 

 

数据库设计总结: [W16]

[W17]

animal

food

骨头

...

...

注意: 系统高峰期,考虑到系统结构,网络速度,安全性

聚集: 定义某一类型的组成部分

实体: 具有某些共同特性或行为的对象,可抽象为一个实体

实体、属性区分:

一般原则:

属性不能再分

属性不能与其他实体有联系(联系只发生在实体之间)

 

消除各分 E-R图合并时产生的冲突:

属性冲突     属性域冲突(值类型、聚会范围或取值集合不同)

    属性取值范围冲突

结构冲突     “课程”在某一局部当作实体,在另一局部当作属性

                                          “零件”在几个局部中,含有不同的属性

命名冲突

[W18]

优化多个局部合并后全局E-R模型:

实体个数尽可能少

实体包含的属性尽可能少

实体间联系无冗余

 

一个实体转换为一个 关系模式 [W19]

1:m         m:1       m:n

( 一个表 )  ( 一个表 )   ( 一般三个表,即创建一个链接表 )

 

 

 

 

 

 

 

 

 

 

 

 

 

关系数据模型的优化通常以规范化理论为主导,并考虑系统的性能

对关系模式进行必要的分解,以提高数据的操作效率和存储空间的利用

 

数据完整性:

表级完整性 (主键...)

字段级完整性 (字段规范 ...

关系级完整性 (关系表 ...

完整性另一种分法:

实体完整性

参照完整性

用户定义完整性 (使用锁、时间戳等保征完整性,业务规则 business rule

  (外键实现机制,触发器实现机制, not null check default 等)

 

参与类型

表具有两种参与类型:

强制性的(在另一个表输入任何记录之前,这个表中必须至少存在一条记录);

可选的(不要求这个表存在任何记录);

//每个表的参与类型通常由表中数据相关联以及被使用的方式决定

 

参与程度

表中最少和最多有多少条记录可以和另一个表中的一条记录相关

如果 table A 中的一条记录最少可以和 table B 中的十条记录相关,那么 table A 的参与程度是 (1,10)

 

如果每个经纪人至少可以代理一个客户,但到多不能超过8个客户,则 clints表的 参与程度为 (1,8)

如果每个客户只能被指定给一个经纪人,则 agents 表的参与程度为(1,1)

 

 

每个表至少有一个候选键(CK,组合的称为CKK)

主键是从可用的候选键池中获得的(PK)

 

如果 x → y y 不包含于 x, x → y是非平凡 函数依赖 ( x 为决定因子)

如果 x → y,并且对于x 的任一个真子集 x' 都有 x' → y, 则完全函数依赖 x   f    y

如果 x' → y 成立,则部分 函数依赖 x   p    y

x → y(非平凡 函数依赖, y → x ),y → z ,则称 z 传递函数依赖于 x

x   f    y ,y   f    z ,则 x   传递    z

 

全码:候选码为整个属性组

包含在任意候选码中的 ... 为主属性, ... 为非主属性

 

需求分析方法 : 自底而下,自顶而上

数据字典 DD , 数据流程图 DFD

 

 

数据库优化总结:

通配符搜索的处理要比前面讨论的其他搜索花时间更长,不要过度使用

尽量不用游标,影响性能 ,很大

不要使用 select *

在程序编码时使用大数据量的数据库

尽量不要使用 TEXT 数据类型, 不易于查询,速度慢

一般地 Varchar 查以更好地处理数据

尽量不要使用临时表,除非必须那样做,/一般使用 子查询 可以代替临时表

如果需要删除或者插入大量的数据,删除索引并重建,效果更好

不要 true/false 字段创建索引

尽量避免使用触发器

采用视图

列命名技巧:

Customer 表的前缀是 C u_

子段名 C u_name , C u_address. .

不要索引常用的小型表 (如果表中的字段数较少,每次从表中读取的记录百分比较大,则无好处)

不要索引 memo/notes 突出字段,而且不要索引大型文本字段

如果两实体存在多对一关系,而且还有可能转化为多对多关系。最好一开始就设置成多对多关系

有必须重复很多字段的表,可以用“代码”代替,这样减少容量

连接查询没有子查询效率高

 

列级完整性 约束定义:
        not null

Default [W20]

Unique

Check

Primary key

Foreign key [W21]

表级完整性 以上除 not null , Default 不能 外, 其他的都可以设置 表级完整性

创建数据表时:          [W22] clustered        

创建PRIMARY KEY | UNIQUE 约束时,默认为 NONCLUSTERED [W23]

 

 

 

Alter table qw

Add 列名

Drop column 列名

Alter column 列名 [W24]

 

Select   from  Where

Group by

Having [W25]

Order  by

 

Select sno  as   shine  from  SC [W26]

select Cast( x as money ) from tabel1 [W27]

Convert ( 数据类型[长度],表达式 )

 

Select distinct sno from SC [W28]

 

Select sno from SC where  not Sage >=20

 

Select sno from SC where Sage >=20 And Sage <=30 [W29]

Select sno from SC where Sage <20 And Sage >30 [W30]

Select sno from SC where sdept in (' 信息系', ' 数学系 ',' 计算机系 ') [W31]

 

字符 匹配 LIKE (like 子句中O racle DB2是区分大小写的,而其他数据库不区分)

_ 任意一个字符   % 0个或多个字符 [ ] 任一个字符 [ ^ ] 不匹配里面的任一个字符

注意: Select * from course where Cname like 'DB/_system' [W32]

 

SQL语句中的模糊查找

搜索以PHP100开头:

SELECT * FROM teble WHERE title  LIKE  'PHP100%'

 

搜索以PHP100结束:

SELECT * FROM teble WHERE title  LIKE  '%PHP100'

 

搜索包含PHP100:

SELECT * FROM teble WHERE title  LIKE  '%PHP100%'

 

 

 

Select sno,cno from sc Where grade is Null [W33]

 

对查询结果排序

Select …… Order by 列名 DESC | ASC [W34]

 

Select COUNT ( Distinct Sno ) from student [W35]

 

 

 

注意: 聚合 函数 不能出现在 where 子句中。但可以放在 having下

如:查询年龄最大的学生的姓名,如右写法是错的。 [W36]

 

Select Sno from SC Group By Sno Having COUNT(*) > 3 [W37]

 

多表连接查询

内连接 From 表1 [inner] join 表2 on 连接条件 [W38]

自连接(一种特殊的内连接,必须为表取别名) [W39]

外连接 From 表1 left |right|all [outer] join 表2 on 连接条件下 [W40]

/*SQL SERVER支持ANSI方式的外连接; join ... On ...

  ORACLE支持  theta 方式的外连接 where ..=... */

连接查询没有子查询效率高

子查询 [W41]

Where 表达式 [not] IN ( 子查询 )   ( 先执行内层再执行外层 )

Where 表达式 [not] Exists ( 子查询 ) [W42] ( 先执行外层再执行内层 )

注意:一般情况下,对于否定条件的查询都应该使用子查询来实现,而且应该将否定放在外层

 

 

 

 

 

 

更新表字段中的数据 Update 表名 set  (where)

更改表字段 Alter 表名 alter  

 

删除数据

无条件删除  delete from SC  (SC 成空表 ) [W43]

有条件删除   delete from SC where ……

 

复制表

Select * into t2 from table1 [W44]

Select * into t2 from table1 where 1 = 2 [W45]

 

定义多源表视图 [W46] create view < 视图名 > [视图列表名]

这样定义的视图一般只用于查询,不用于修改数据

可以在视图上再建立视图

查询语句中通常不包含 order by 和distinct 子句

在定义视图时要么指定全部视图,要么全部省略。但在如下情况必须明确指定组成视图的所有列名:

(某个目标列不是单纯的属性名,而是计算函数或者列表达式;

……

可以通过视图和基本表的 join 连接实现查询

 

 

Create view me(sno,average)

AS

Select sno,AVG(grade) from SC

Group by Sno [W47]

 

 

注意: D rop table 不能用于除去由 foreign key 约束的引用的表 必须先除去引用的 foreign key 约束或引用的表

 

注意:insert into 子句指出的属性顺序可以与表中顺序不同

插入多行数据

sql server

Insert into book1

Select 'dfffff','dfd',''dfdfdfdf,'dfdfd',''fdf,'df' union

Select 'dfffff','dfd',''dfdfdfdf,'dfdfd',''fdf,'df' union

Select 'dfffff','dfd',''dfdfdfdf,'dfdfd',''fdf,'df'    /* 最后一行不用加 union*/

 

mysql

INSERT INTO `test` (`id`, `uid`, `regdate`, `remark`) VALUES

(1, '张三', '2008-07-02', '学生'),

(2, '李四', '2008-07-03', '学生'),

(3, '王五', '2008-07-02', '工人'),

(4, '赵六', '2008-07-01', '学生');

 

 

 

视图: create view

存储过程: [W48] create procedure 存储名 .... . exec 存储名 [W49]

执行存储过程时,区分大小写

系统存储过程:

sp_tables

sp_stored_procedures                   //查看存储过程df

sp_databases

sp_passwords                   // 修改而且只能修改标准登录的密码

sp_who                            //谁在使用数据库

sp_helptext ' 过程名,未加密的触发器名等 ' //查看定义存储过程等的文本命令格式

sp_help            // 查看名称所有者,建立时间

sp_depends         // 查看引用的表或列 (触发器等)

sp_depends ' 表名   //查看表被哪些存储过程调用

sp_rename 原存储过程名 新存储过程名   //修改名

sp_helptrigger          // 查看触发器信息

 

sp_addumpdevice   // 数据库备份

sp_addrolemember          ///*添加数据库角色成员*/

 

sp_help_fulltext_tables // 获取已启用全文处理的所有表

sys.fulltext_catalogs   //是一个系统视图 。 查询数据库的所有全文目录 [W50]

 

@@identity    sqlserver中的全局变量(系统函数)  
   意思:返回上一个标示符的值 ,返回目前session,所有范围(scope)中,任何表所生成的最后一个IDENTITY值  
  例如:你曾经对某个表,有自增字段id   int   identity(1,1),有插入过一条纪录,id为77022,那么你  
   select   @@identity   as   qq,qq   就等于   77022  

 

 

存储过程进阶:

 

存储过程使用4种参数返回数据:         

输出参数 可以返回数据(整型值或字符值),也可以返回游标变量 output                   [W51]

返回代码          始终是整型值 return          [W52]

select 语句的结果集          SELECT 数据集返回值

可从存储过程外引用的全局游标  见SQL语言参考电子书

 

存储过程设置自动执行; (请勿从自动执行的存储过程中返回任何结果集,因为该存储过程由 sql server 而不是某位用户执行,所以结果集将无处可去)

sp_procoption          设置过程选项。 语法

sp_procoption[ @ProcName =] 'procedure'
    ,[ @OptionName =] 'option'
    ,[ @OptionValue =] 'value' (true或faule) [W53]

 

 

 

 

alter proc 名称  AS ...    //修改存储过程内容

 

打印东西:

print()                      // 发送错误信息,可给当事人发信息

raiserror()          [W54]          //可给任何人发信息

 

DML触发器、 DDL触发器 [W55]                 DDL触发器实例02

insert , update , delete 语句上创建DML触发

create , alter , drop , crant , revoke 语句上创建DDL触发

基本 触发器类型: [W56]

AFTER触发器(后触发);INSTEAD OF触发器(替代触发); [W57] .NET触发器

 

启用、禁用触发器:         enable trigger ... on database

disable trigger ... on database

 

inserted表和deleted 表:

1. 执行 insert 操作,插入的到触发器表中的新行被插入到 inserted 表;

2. 执行 delete 操作,从触发器表中删除的行被插入到 deleted 表;

3. 执行 update 操作,先从触发器表中删除旧行,然后再插入新行。其中被删除的旧行被插入到 deleted 表中,插入的新行被插入到 inserted 表中。

 

insert update触发器实例

delete 触发器实例

 

AFTER触发器 和 INSTEAD OF触发器 功能比较

功能

AFTER触发器

INSTEAD OF触发器

适用范围

表和视图

每个表或者视图含触发

器数

每个触发动作(update,delete,insert)

含多个触发器

每个触发动作(update,delete,insert)

含一个触发器

级联引用

不应用任何限制

在作为级联引用完整性约束目标的表

上限制应用

执行

晚于:

1. 约束处理

2. 声明引用操作

3. insert deleted 表的创建

4. 触发动作

早于:

约束处理

代替:

触发动作

晚于:

insert deleted 表的创建

执行顺序

可指定第一个和最后一个执行

不可用

instead deleted 表中

引用 text ntext image

不允许

允许

 

如果发生约束侵犯,则永远不会执行after 触发器,因为这些触发器不能用于任何可能防止约束侵犯的处理

 

 

 

 

 

 

递归触发器 最多只能 32层          (嵌套触发器)

如果递归链中的第32个触发器激发第33个触发器,刚结果与发布Rollback 命令一样,一切东西都将被擦除

 

 

声明局部变量:

declare @××× int    // 在一个批( go )内才可以用

声明多个变量:

declare @××× int,

      @×××  char(3)

变量赋值:

set  @××× = ' '  [W58]

把查询结果赋给变量:

select @××× =  (select ... from ...) [W59]

全部局部变量: (系统设置的,只能读,不能写)

@@version   // 系统等信息

 

控制语句:

if   ××× [W60]

begin

... ...

end

 

case 表达式

when 条件 then 结果

when 条件 then 结果

... ...

else

end

 

goto 跳转语句:

label1:

...

goto label1

 

waitfor 时间控制语句          [W61] 定时

BEGIN

waitfor delay '2:00' ;         [W62]

execute sp_helpdb ;

END

GO

-- 指定在2小时后执行存储过程

 

 

并发控制:

 

基于锁的解决方案

锁定( locking ) 是一种预防性过程

锁(lock) 是一个与数据项相关的变量

常用锁定方案: [W63]

排他锁 (也称写锁 X锁  X- lock [W64]

共享锁 (也称读锁 S锁  S- lock )  不允许写操作

锁级别  锁管理 死锁问题

 

基于时间戳的解决方案 (不出现死锁问题)

[W65]

游标: [W66] 静态游标,动态游标,关键字游标

declare @qw cursor          set @qw = cursor         

sql server 2005支持3种游标实现:( 服务器游标( Transact-QL 游标、API 服务器游标 )、客户端游标

1. Transact-QL 游标,基于declare cursor 语法, 主要用于 Transact-QL脚本、存储过程和角             发器中;

2.             应用编程接口(API) 服务器游标,支持 OLE DB 、ODBC和DB - L ibrary 中的API游标          函数; [W67]

3. 客户端游标;          (客户端游标不使用任何一个服务器游标功能, 客户端游标仅支持 只进的静态游标 ,不支持键集驱动游标和动态游标

下面是sql server 2005 支持的4种API服务器游标:

1. 静态游标(总是按照游标打开时的原样显示集,其结果集存储在tempdb 的工作表中,结果集中的行大小不能超过 sql server 表的最大行大小 static

2. 动态游标(与静态游标相对,反映结果集中所做的所有更改,所有用户做的全部update insert delete 语句均通过游标可见 [W68] dynamic

3. 只进游标(不支持滚动,只支持游标从头到尾顺序提取) fast_forward

4. 键集驱动游标  keyset

 

优化游标性能

1. 能避免时就避免使用游标

2. 除非必要否则不要使用static/insensitive游标。打开static游标会造成所有的行都被拷贝到临时表。

3. 除非必要否则不要使用keyset游标。和static游标一样,打开keyset游标会创建临时表。

4. 当处理单向的只读结果集时,使用fast_forward代替forward_only。

5. 使用read_only关键字定义只读游标。这样可以防止意外的修改,并且让服务器了解游标移动时不会修改行。

6. 善用 只进游标

 

 

游标说明见 SQL语言参考

 

fetch [W69]

 

通过游标更新数据:

 

在事务中使用游标:         [W70] ( 简单的 )

 

游标的高级实例用法:

use student_course

go

alter table SC

add flag char(8)

go

declare @Score int

declare sc_cur  cursor   for select grade from SC  for   update of flag [W71]

open   sc_cur

fetch next from sc_cur into @Score [W72]

while @@fetch_status = 0 [W73]

begin

if  @score >=  90

update SC set  flag = ' 优秀 ' where current of [W74] sc_cur

if ..

if ..

fetch next from sc_cur

end

close sc_cur          [W75]

deallocate sc_cur [W76]

 

数据类型转换 (隐式转换,显式转换) [W77]

类型转换 函数: (显式转换)

CAST [W78]

CONVERT [W79]

 

权限:

grant 权限 on to 用户 [W80]

revote 权限 on from 用户 [W81]

deny 权限 on to 用户          [W82]

 

创建架构(模式) create schema

在架构里创建权限等

 

  创建文件组: 日志文件不能成为任何文件组织的成员,即日志文件只能单独存放

扩充数据库:

注意:如果你数据库已经用完分配给它的空间而又不能自动增长,则会出现 1105 错误

这里需要扩充数据库量

收缩数据库:

SQL语句修改数据库参数:          alter database ... set  AUTO_CLOSE ON

 

 

 

CREATE SCHEMA
创建一个架构,并且可以在概念上将其看作是包含表、视图和权限定义的对象          [W83]

 

数据库备份恢复:

2005         (完整) 数据库备份,差异数据库备份,事务日志备份

简单恢复,完全恢复,大容量日志记录恢复

 

备份模式之间的比较

恢复模式

优点

工作损失表现

能否恢复到即时点

简单恢复

允许高性能大容量复制操作

收回日志空间以使空间要求

最小

必须重做自最新的数据库

或差异备份后所发生的

更改

可以恢复到任何备份的结

尾处。随后必须重做更改

完全恢复

数据文件丢失或损坏不会导致工

作损失

可以恢复到任意即时点(例如,

应用程序或用户错误之前)

正常情况下没有

如果日志损坏,则必须重做

自最新的日志备份后所发生

的更改

可以恢复到任何即时点

大容量日志记录

恢复

允许高性能大容量复制操作

大容量操作使用最小的日志空间

如果日志损坏,或者自最新

的日志备份后发生了大容量

操作,则必须重做自上次备

份后所做的更改

否则不丢失任何工作

可以恢复到任何备份的

结尾处,随后必须重做更

 

 

支持每种恢复模式的备份类型

模式

备份类型

 

数据库

数据库差异

事务日志

文件或文件差异

简单恢复

必需

可选

不允许

不允许

完全恢复

必需(或文件备份)

可选

必需

可选

大容量日志记录恢复

必需(或文件备份)

可选

必需

可选

 

备份恢复数据库: [W84]         backup restore 实例

backup database ××× to disk = ' d:/a.bak ' with INIT

restore database ××× from disk = ' d:/a.bak ' with replace

 

宿主:         能够请求 sql server 资源的个人、组、和进程,称为宿主          [W85]

 

服务器角色:

固定服务器角色的作用域在服务器范围内。它们存在于数据库之外,固定服务器角色的每个成员都能够向该角色中添加其他登录

2005 固定服务器角色

角色

描述

Sysadmin

执行 sql server 中的任何活动

Serveradmin

配置服务器范围内的配置选项,以及关闭服务器

Setupadmin

添加和删除链接的服务器,以及执行某些系统存储

过程(如sp_serveroption)

securityadmin

管理服务器范围内的安全设置(包括链接的服务器)

以及create database 权限。重置 sql server 身份验证

登录的密码

processadmin

终止sql server 上运行的进程

dbcreator

创建、改变、除去或者还原任何数据库

diskadmin

管理磁盘文件

Bulkadmin

允许非sysadmin 用户运行b ulkadmin 语句

 

数据库角色:

固定数据库角色在数据库级别定义,并在每个数据库中都存在。 db_owner db_security 管理员角色的成员可以管理固定数据库角色的成员身份;但是,只有 db_owner 角色可以将其他用户添加到 db_owner 固定数据库角色中

2005 固定数据库角色

角色

描述

db_owner

执行数据库中的所有维护和配置活动

db_accessadmin

添加或删除 windowds 用户、组和 sql server 登录的

访问权限

db_datareader

读取所有用户表中的所有数据

db_datawriter

添加、删除或更改所有用户表中的数据

db_ddladmin

在数据库中运行任何数据定义语言(DLL)命令

db_securityadmin

修改角色成员身份并管理权限

db_backupoperator

备份数据库

db_denydatareader

无法读取数据库用户表中的任何数据

db_denydatawriter

无法添加、修改或删除任何用户表或视图中的数据

 

sql server 2005 创建登录名:

右键单击“ 安全性 ”文件夹,指向“ 新建 ”,然后单击“ 登录名

管理SQL Server 登录实例                  [W86]

管理SQL Server 角色实例

管理SQL Server权限 实例

 

VS 2005 SQL server 2005 安装顺序:

最好是 先 SQL server 2005 再装VS 2005          [W87]

更改SQL server 服务所使用的账户和密码:

SQL server配置管理器

账号的密码管理:

定期更改密码,数据库管理员应该定期查看是否有不符合密码要求的账号          [W88]

 

guest 用户账号。 没有数据库用户的用户能够通过此账号访问数据库,如果决定使用此账号,管理员就应该给它分配一个合适的权限

public 角色权限。 此角色包含所有数据库用户账号和那些角色从属关系不能改变的用户账号。注意给此角色分配哪种权限

 

 

系统 数据库:

master          控制用户数据库和SQL server 操作,记录 SQL server 实例的所有系统级信息,包括存储用户账户、可配置的环境变量、系统错误消息等信息 [W89]

model          用于SQL server 代理计划警报和作业

msdb                   所有数据库实例的模板,每次启动sql server 时都会创建 tempdb 数据库

tempdb          用于保存时时对象或中间结果集

resource ( 隐藏了的 )

 

分离数据库 附加数据库

 

用户定义函数的分类:         (SQL语言参考)

标题函数: 也叫数值型函数,返回一个确定类型的数值

内联(单语句)表值型函数: 以表的形式返回一个值,相当于一个参数化的视图

多语句表值型函数: 上面两种函数的结合体,返回值是一个表,可以进行多次查询,对数据进行多次筛选与合并,弥补了内联表值型函数的不足

 

 

SQL Server系统表sysobjects         [W90]         sys.objects (Transact-SQL)参考网址

在大多数情况下,对你最有用的两个列是sysobjects.name和sysobjects.xtype。前面一个用来列出待考察对象的名字,而后一个用来定义对象的类型,其代码如下:

C:检查约束。

D:默认的约束

F:外键约束

L:日志

P:存储过程

PK:主键约束

RF:复制过滤存储过程

S:系统表格

TR:触发器

U:用于表格。

UQ:独特的约束。

V:视图

X:被扩展的存储过程

 

事务和批处理的区别:

批:一次一起执行的一组语句  
   事务:用户定义的一组操做系列。  
   他们之间的区别是:  
   当批中的语句有语法错误的时候,整个批不能执行,不是语法错误的时候,  
   批中没有错误的语句执行,  
   而事务则不同,事务要么都执行,要么都不执行!!!

 

SQL命令提示工具:

SQLCMD          sqlcmd -? // 显示帮助

select * from....

go

管理日志:

服务器属性--安全性--登录审核 

在管理--sql server 日志里查看是否有可疑的登录事件

 

 

Profiler 对数据库的跟踪:

数据库优化顾问(DTA3):                 优化物理数据库设计

 

XML 与2005配合使用

 

全文索引 能够对对数据库中的字符(如 varchar text ntext 等)、 image 等类型列进行索引,并通过自身实现全文搜索查询,是全文搜索的重要一步          [W91]

全文目录包含数据库中的全文索引,在每个服务器上最多可创建256个全文目录

一个表只能有一个全文索引。全文索引和目录不存储在它们所属的数据库中。目录和索引由 microsoft 搜索服务分开管理。

 

create fulltext catalog qqq as default;                   // 建立一个全文目录qqq,存放在默认的地址

创建全文索引: 全文索引实例

通过软件的向导 (在表 右键 全文索引 定义全文索引)

通过 sql 语句 create fulltext index on ...          [W92]

填充操作:(全文搜索引擎的技术精髓)

完全填充一般发生在第一次对目录或索引进行填充的过程中,以后对全文索引的维护一般使用跟踪或增量填充即可。在跟踪和增量填充模式下,如果对数据库有更改,可以很方便地反映在全文索引的填充中

全文查询:

select * from ... where contains (Description,"sdfsdf" or "dsfsdfds")

sp_help_fulltext_tables // 获取已启用全文处理的所有表

sys.fulltext_catalogs   //是一个系统视图 。 查询数据库的所有全文目录 [W93]

sp_fulltext_database 启动或更改数据库的全文处理功能

sp_fulltext_catalog 建立或更改全文目录

sp_fulltext_table 在全文目录中注册需要全文索引的表,也可以取消已经注册为全文索引的表

sp_fulltext_column 指定的某个特定列是否参与全文索引

 

在全文索引中,不会存储全文索引列中的干扰词(如:a and 、the等 ),干扰词文件(Microsoft SQL Server/MSSQL.1/MSSQL/FTData) -- noiseCHS 文件代表简体中文的干扰词, noiseCHT 文件代表繁体中文的干扰词.....

例如:高科技公司的管理员可以指导 "computer" 一词的添加到他们的干扰词列表中。如果对干扰词文件进行了编辑,则必须重新填充全文目录,更改才能生效。

在搜索中,标点将被忽略。 [W94] 搜索词或短语中的字符不区分大小写

 

mysql 支持contains ,但 contains 的用法不同,不是用于全文索引。

下面是一些特殊的 contains 搜索:

前缀搜索                      contains (Description,' " chain *" ')

派生词搜索                 contains (Description,' FORMSOF ( INFLECTIONAL ," foot ") ')          [W95]

词加权搜索               contains ( Description,' ISABOUT (performance weight(.8) ,comfortable weight (.4),smooth weight (.2)) ' ) ;                   [W96]

邻近词搜索                 也可以用字符 "~" 来代替 NEAR 关键字 [W97]

布尔逻辑检索                   AND AND NOT OR [W98] 。其中 OR 也可以用 | 来代替

用FREETEXT进行模糊检索:

where freetext (Description,'sky  shine  me');   //搜索包含与 sky,shine,me 相关的单词的所有文档

containstable freetexttable 的使用: (返回一个表)

select * from freetexttable ( 表名 ,列名,'dfdfd df df'); [W99]

使用 RANK 值:

select .. from .. INNER JOIN freetexttable(   ) AS KTBL

.... where KTBL. RANK >= 10

order by KTBL. RANK DESC;         

// 只返回排名值为10或更高的行,并且以全文查询得到的RANK值为标准排序输出。

限制结果集:

返回前 5 匹配项,只有 containstable freetexttable 才有的可选参数

freetexttable ( 表名 ,列名,'dfdfd df df' , 5 );

同样也可以使用 top 子句来限制 contains freetext 的结果集中返回的数

 

查找系统存储过程或者其他函数时,适当运用 筛选器

 

sql server 2005复制技术架构:

“出版--订购”模式结构示意图

 

 

server 2005的3种复制类型:

快照复制                   事务日志复制                   合并复制

配置分发服务器:  右键--复制--配置分发向导

右键--复制--启动复制监视器

Server Broker 处理异步消息:

消息                   服务                   队列         

在默认情况下,创建数据库时数据库中的Server Broker 消息传递处于活动状态。当消息传递处于不活动状态,请检查 sys.databases 目录视图的 is_broker_enabled 列。如 [W100]

 

高级功能:

外围应用配置器 (开启其他功能等)

 

配置sql server        odbc

单 击'添加',在'创建新数据源'对话框下选择'SQL Native Client',此时配置的是SQL Server2005数据源(如果不行,应该就是版本问题,因为微软好像已经不维护这块了),如果要配置SQL Server 2000的,则选择'SQL Server',单击'完成';

3. 给 出数据源命名和说明(可选的),在接下来的编辑框中,选择服务器,!一般情况下,该编辑框会给出本地主机名,'.'或者'LOCAL',这时你要给 出完整服务器名。如果本地机器上装了SQL Server 2005,则可以填上'./SQLEXPRESS'或者'本机名/SQLEXPRESS',不然向导会提示出错信息导致创建数据源失败!
       4.好了,接下来取向导默认值,就可以完成数据源的配置了。

 

 

SQL Server时间格式输入:

2001-10-25 3 :28:56 PM     /*12 小时格式 */

2001-10-25 15 :28:56                   /*24 小时格式 */

Access 时间格式输入:

#2005-01-02#

Oracle 时间格式输入:

02 Jan 2005        //默认安装的Oracle数据库格式

非Oracle 数据库格式:

2005-01-02

 

SET IDENTITY_INSERT 【 database.【 owner.】 】 { table } { ON |OFF }

  sql server事务处理:

begin transaction 

commit transaction

设置一个保存点   save  transaction  保存点名称

回滚到刚才的保存点  rollback  transaction  保存点名称/单元名称

  结束前面的事务

  sp_rename  'tablename.fieldname','newfieldname' // SQLServer 修改字段名

 
alter table t1 modify  tname varchar(100);  //修改列定义:

  alter table t1 change tname tname2 varchar(255);  //修改列名:

  alter table xx rename column yy to zz  // Oracle 修改字段名

  exec '1/1/1987'

 

CREATE  procedure pro_new3

@sn char(9)

as select sname,sc.cno,cname

from student join  sc on student.sno=sc.sno

             join  course  on sc.cno=course.cno

Where student.sno=@sn

 

EXEC proc_students ' 200215121 '

  概念,逻辑

概念模式

 

单个数据页面能保存的实际数据量是8092;

单个数据页面的字节大小是8192;

一个表的存储是由两部分组成。一部分用来存放表的数据页面,另一部分存放索引页面。索引就存放在索引页面上,通常,索引页面相对数据页面来说小得多。SQL SERVER中的索引是以B-树结构来维护

 

索引: 非聚集 索引, 聚集 索引。

 

  聚集 索引和 非聚集 索引 都可以是唯一索引

  -不用索引查询
Select * FROM IndexTestTable WHIT(INDEX(0))
Where Status='B'

--创建聚集索引
Create CLUSTERED INDEX icIndexTestTable
ON IndexTestTable(Status)
GO

使用 索引 查询
Select * FROM IndexTestTable WITH(INDEX(icIndexTestTable))
Where Status='B'

 

http://www.microsoft.com/china/technet/prodtechnol/sql/2005/ipsql05iv.mspx

本地文档

如果在视图上创建索引,那么视图中的数据将立即存储在数据库中,对索引视图进行修改,那么这些修改会立即反映到基础表中。同理,对基础表所进行的数据修改也会反映到索引视图里

 

在 执行查询时,有两种方法可以使用索引视图。查询可直接引用索引视图,更重要的是,如果查询优化器确定视图能够替换 为查询的部分或全部,而且这是低成本的查询计划,则可以选择索引视图。第二种情况是使用索引视图代替基础表及其普通索引。此时,不需要在查询中引用视图, 查询优化器即可在执行查询期间使用该视图。

 

维护索引视图比维护基础表的索引更为复杂。所以如果认为值得以因数据修改而增加系统负担为代价来提高数据检索的速度,那么应该在视图上创建索引

 

创建索引视图

在创建索引视图或对参与索引视图的表中的行进行操作时,有 7 个 SET 选项必须指派特定的值。SET 选项 ARITHABORT CONCAT_NULL_YIELDS_NULL QUOTED_IDENTIFIER ANSI_NULLS ANSI_PADDING ANSI_WARNING 必须为 ON。SET 选项 NUMERIC_ROUNDABORT 必须为 OFF。

 

必须使用 WITH SCHEMABINDING 选项创建视图

CREATE VIEW Vdiscount1 WITH SCHEMABINDING AS

SELECT SUM(UnitPrice*OrderQty) AS SumPrice,

SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS SumDiscountPrice,

COUNT_BIG(*) AS Count, ProductID

FROM Sales.SalesOrderDetail

GROUP BY ProductID

GO

CREATE UNIQUE CLUSTERED INDEX VDiscountInd ON Vdiscount1 (ProductID)

  SQL server 中会自动识别采取哪种文件组织的

  数据库设计准则:

命名规范,大小写敏感

索引使用原则

数据的一致性和完整性

  关系模型相关知识:

域: 一组具有相同数据类型的值的集合,如整数,字符串,{男,女},大于零小于等于100的正整数

笛卡尔积:

  给定一组域  D1,D2, .... ,D n. 则D1,D2, .... ,D n.的 笛卡尔积为:

   D1 × D2 × .... × D n = {(d1,d2,...,dn)|di D j, ,j = 1.2....n}

 

如 :

  D1  = animal( 动物集合 ) = { 猫,狗,猪 }

  D2  = food(食物集合) = {鱼,骨头,白菜}

  D1  × D2 = {(猫,鱼),(狗,鱼)(猪,鱼)(猫,骨头)()}

    这9个元组可列成一张二维表:

  专门的关系运算:

一、 选择

    σ F (R) = {t | t R ∩  F(t) = ' '}

    //从关系R中选取使逻辑表达式F为真的元组

  设有一个 学生-课程关系数据库, 包括学生关系S,课程关系C,选修关系SC

  查询数学系(MA)学生的信息  σ SD = 'MA' (S)    // 其中SD 为所在系

  查询年龄小于20的学生信息   σ SA <20 (S)    // 其中SA 为年龄

二、 投影

   关系R上的投影是从R中选择出若干属性列组成新的关系

     A (R) = {t[A] | t R}      //A 为R中的属性列

   查询学生的学号和姓名:  S#,SN (S)  或 ∏ 1,2 (S)

    查询选修了2号课程的学生的学号: S# ( c#='2' ( SC ) )    // 同一个表

   查询选修了3号课程的学生的姓名: SN ( c#='3' ( SC ) S )   // 连接两个表

三、 连接

    也称θ连接,从两关系的笛卡尔积中选取属性间满足一定条件的元组

     R∞S = {t r t s | t r R∩t s S∩t r [A]θt s [B]}     (A=B 为等值连接 )

   

 

  关系模式 就是对关系的描述

学生(学号,姓名,姓别 ....

  add constraint 约束名 Default 默认值 for 列名

列级完整性的用法(不用加 for ): (与JAVA的 GridBag constraint 布局相似)

Create table qq

(

  工资 int default 1000 check ( 工资 >= 500 )

)

 

http://www.w3school.com.cn/sql/sql_foreignkey.asp (W3)

列级:

Id_P  int  FOREIGN KEY    REFERENCES Persons(Id_P)

表级:

CONSTRAINT fk_PerOrders  FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)

  clustered 是指定簇索引的关键字。例句中,ssn字段被指定为簇索引!

不写Clustered建立的是普通索引,索引有序而表中数据无序
写了Clustered建立的是聚集索引,索引和表中数据均有序

  CREATE TABLE jobs

(

   job_id  smallint

      IDENTITY(1,1)

      PRIMARY  KEY  CLUSTERED ,

     ...

)

  A dd 不用加 Coumn

  配套用的

Group by 后不能是 text,ntext,image,bit 类型的列

  等价于 Select sno  shine  from  SC(即不用as)

  数据类型转换

  去掉重复行

  等价于

Select sno from SC where Sage between 20 And 30/* 包括 20 同30 */

  等价于

Select sno from SC where Sage not between 20 And 30

  等价于

Select sno from SC where sdept =' 信息系' OR sdept =' 数学系 ' OR sdept =' 计算机系 '

  相当于 DB_system 要用 /_ 转为通配符

  查询 无考试成绩 的学生的学号和相应的课程号

  对查询结果排序 升序 ,从小到大,默认的

  统计 选修了课程 的学生的 人数

  Selecft Sname from student Where Sage = MAX(Sage)

  查询选课门数超过3门的学生的学号

  相当于 自然连接查询: Where ... = .....

  查询与刘晨在同一个系学习的学生的姓名和所在的系:

Select s2.name,s2.sdept

From student s1 join student s2  on  s1.sdept = s2.sdept

Where  s1.sname = ' 刘晨 ' and s2.Sname != ' 刘晨 '

  Left 是左外连接(限制表2中的数据必须满足连接条件,而不管表1中的数据是否满足连接条件)

right 是右外连接(限制表1中的数据必须满足连接条件,而不管表2中的数据是否满足连接条件)

 

>ANY(1,2,3)   -- 表示大于1

>ALL(1,2,3)    -- 表示大于3

<>(a,b,c)       -- 不等于 a 或者不等于 b 或者不等于 c

NOT IN(a,b,c)   -- 不等于 a, 不等于 b ,且不等于 c

=ANY 与 IN 是等效的

  使用 子查询 进行 存在性测试

  等价于 Trancate table 表名

M ysql用法:truncate 数据表

  复制表到 t2

  复制表结构

  Create view V_IS_S1(sno,sname,sage)

AS

Select student.sno,sname,sage   From studen join sc on studen.sno = sc.sno

Where sdept = ' 信管系 ' and sc.cno = ''c01'

  分组统计信息 的视图: 定义一个存放每个学生的学号及平均成绩的视图

 

CREATE  procedure pro_new3

@sn char(9)

as select sname,sc.cno,cname

from student join  sc on student.sno=sc.sno

             join  course  on sc.cno=course.cno

Where student.sno=@sn

 

EXEC proc_students ' 200215121 '

 

  exec '1/1/1987'

使用默认参数值的存储过程:

create proc ... @qw varchar(10) = '...'

  use ...

select * from sys.fulltext_catalogs

  sql server 用法

CREATE PROC TEST2
  @PA1 INT,
  @PA2 INT,
  @PA3 INT OUTPUT
AS
  SET @PA3 = @PA1 + @PA2
GO

DECLARE @PA4 INT
EXEC TEST2 2,4, @PA4 OUTPUT
SELECT @PA4

 

mysql prcedure 返回值一般用法

mysql > CREATE PROCEDURE simpleproc (OUT param1 INT )

   -> BEGIN   -> SELECT COUNT ( * ) INTO param1 FROM t;

   -> END ;

mysql > CALL simpleproc( @a );

mysql > SELECT @a ;

  CREATE PROC TEST1
  @PA1 INT,
  @PA2 INT
AS
  RETURN @PA1+@PA2
GO

DECLARE @PA3 INT
EXEC @PA3=TEST1 3,4
SELECT @PA3

 

CREATE PROCEDURE checkstate

@param varchar(11)

  AS

IF (SELECT state FROM authors WHERE au_id = @param) = 'CA'

  RETURN  1

ELSE

  RETURN  2

下例显示从 checkstate 执行中返回的状态。第一个显示的是在加利福尼亚州的作者;第二个显示的是不在加利福尼亚州的作者,第三个显示的是无效的作者。必须先声明 @return_status 局部变量后才能使用它。

DECLARE @return_status int

EXEC @return_status = checkstate '172-32-1176'

SELECT 'Return Status' = @return_status

GO

  use mm

go

create procedure GetLogoInfo

as

select * from ...

go

  exec sp_procoption @Proname = 'GetLogoInfo' ,

@OptionName = 'starup' , @OptionValue = 'true'

 

@Proname这些参数可以省略,如下

exec sp_procoption  'GetLogoInfo' , 'starup' , 'true'

 

可以设置 sql server scan for starup procs 配置选项以防止所有的存储过程在启动 sql server 时自动执行

  raiserror ("it is wrong!",10,1)

其中上面的10 表示错误严重程度,1--25(最严重)

  DDL触发器 不能是INSEAD OF触发

create trigger ...

on database

for DROP_TABLE,ALTER_TABLE

AS

  print  'you must trigger "safety" to drop or alter tables!'

  ROLLBACK ;

 

DDL 触发器可以响应一个或者多个 T-SQL 语句。但并非所有的DDL事件都能用DDL触发器中。有些事件只用于异步、非事务语句。例如, create database 事件不能用于 .....

 

EVENTDATA 函数 . 捕获DDL触发器的事件信息 返回的是XML类型

 

CREATE  TRIGGER  触发器名

    ON{表|视图}

    [WITH  ENCRYPTION]

    {  FOR |AFTER |INSTEAD OF}{[INSERT][,][UPDATE] [,] [DELETE] }

    [NOT  FOR REPLICATION]

    AS

    [{IF  UPDATE(列名)[(AND|OR) UPDATE(列名)][..n]}

SQL语句

//WITH ENCRYPTION用于加密CREATE TRIGGER语句文本的条目。

  CREATE TRIGGER ins_kk   ON  sc

  instead  of  insert

AS

  declare @xh varchar(10)

select @xh=sno from inserted

  if exists (select * from student  where student.sno=@xh)

  

   begin

        print  '插入成功'

   end

else

    begin

    print  '学号不存在,不能插入'

  rollback  tran

   end 

 

//在SC表中建立一个触发器,当向表中插入一条记录时,检查该学生的学号是否存在于student

 

  也可以用 select ;  如: select   @××× = ' '

print @×××   // 输出

  sele 查询语句 与赋值不能混合使用

  条件里不能加括号

  可用于创建作业等等

  waitfor time '1:58:00'   -- 指定在此时间执行

 

lock table ... write;

insert into ...;   //nysql 使用锁

lock tables ...,...,...   // mysql 锁多个表

  select ... from person with (tablock)   //sql server 使用排它锁

  也可以使用:

select ... from .. limit 5

select top 5 from ...

  DECLARE E1cursor cursor      /* 声明游标,默认为FORWARD_ONLY游标 */
FOR SELECT * from c_example
OPEN E1cursor                /* 打开游标 */
FETCH NEXT from E1cursor     /* 读取第1行数据*/
WHILE @@FETCH_STATUS = 0     /* 用WHILE循环控制游标活动 */
BEGIN
          FETCH NEXT from E1cursor   /* 在循环体内将读取其余行数据 */
END
CLOSE E1cursor               /* 关闭游标 */
DEALLOCATE E1cursor      & ......

  Transact-QL 游标和(API) 服务器游标 都在服务器端实现,它们一起被称为 服务器游标

服务器游标的一个潜在的缺点是它们目前并不支持所有的 Transact-SQL 语句。服务器游标不支持生成多个结果集的 Transact-SQL 语句,因此,当应用程序执行包含多个 select 语句的存储过程或批处理时,不能使用服务器游标。服务器游标也不支持包含 compute compute by for browse into 关键字的 sql 语句

  静态游标是以游标打开时刻的当时状态显示结果集的游标。静态游标在游标打开时不反映对基础数据进行的更新、删除或插入。有时称它们为快照游标。动态游标是可以在游标打开时反映对基础数据进行的修改的游标。用户所做的更新、删除和插入在动态游标中加以反映。

  fetch cursorName INTO @Variable1,@Variable2

//使游标移动到下一条记录,并将游标

返回的每个列的数据分别赋值给本地变量,这些本地变量必须先声明

  set cursor_close_on_commit  {on|off}

控制在提交事务时是否关闭游标。

  -- 如果不指明更新的字段,则它的全部字段都可以更新

  第一次用 next 就是读第一条记录

滚动游标:(使用 scroll 关键字定义的游标,具有以下取数功能)

first  last  prior ( 取前一行 next ( 下一行 )

relative ( 相对位置取数据 )                 absolute ( 按绝对位置取位置 )

若无定义 scroll ,fetch next 是唯一可用的选项

如果指定 SCROLL,则不能也指定 FAST_FORWARD。

 

fetch absolute 5                 // 提取从第一行开始的第5行

fetch relative 5                 //提取从上一个提取行数开始的第5行

  @@fetch_status

0: 读取成功

-1: 不在结果集

  CURRENT OF

指定更新在指定游标的当前位置进行。

  关闭游标

  释放游标

  nchar 值无法转换为 image 值,而且只能显式转换为 binary ,而不支持隐式转换为 binary

nchar 要显式转换为 nvarchar

  cast (表达式 As 数据类型[长度] )

  convert ( 数据类型[长度],表达式 )

      convert(int,substring(xh,1,2))

  授予权限

  收回权限

  拒绝权限

  成功执行了create   schema   st   authorization   wang
那么   wang   就是数据库中的一个用户  
st   就是一个架构名

创建表的时候可以  
create   table   st.表名(t1   int)
访问的时候
select   *   from   st.表名

  完全备份,差异备份,日志备份

系统存储过程:

sp_addumpdevice   // 数据库备份

  例如一个 windows登陆 账户就是单个宿主,而 windows组则是一个集合宿主对象

  顺序:

登录名--选择数据库--用户名

  BI IDE 可能会重复

  use master

select name, password from syslogins where password is null

  小心进行数据库的系统级别操作,如更改服务器或数据库的配置值、修改或添加登录账户等,而且执行这些操作后,应该尽快备份 master 数据库

 

单用户模式运行 SQL server 下才能 还原 master 数据库,

还没有完美解决方案

  /*检查是否存在score表,若存在则删除*/

if exists (select name from sysobjects where name = 'score')

        drop table score

go

 

你可以用下面的命令列出感兴趣的所有对象:

SELECT * FROM sysobjects WHERE xtype = <type of interest>

 

/*检查是否存在check_score触发器,若存在则删除*/

if exists (select name from sysobjects where name = 'check_score' and thpe = 'TR')

        drop trigger check_score

go

 

  先启动 全文搜索 服务,创建 全文目录 ,再进行 全文搜索 定义

 

修改全文目录

alter fulltext catalog ..

删除

drop fulltext catalog ..

 

修改全文索引

alter fulltext  ..

  use ...

select * from sys.fulltext_catalogs

  contains(testing,"computer failure") 将匹配包含 "where is my computer?failure to find ." 主个值的行

  匹配 foot ,feet,

  权值用介于 0.0 和1.0之间

此代码搜索包含 performance ,comfortable ,smooth 等词的所有产品描述,并且给定每个词的不同加权。

sql server 2005 将对那些包含指定词较多的行赋予较高的排名。

  select DocumentID,DocumentSummary,Document

from Production.Document

where contains (Document,'Reflector NEAR Bracket');

// 搜索与词 Reflector Bracket 邻近的文档。

将子句改为: contains (Document,'Reflector ~ Bracket'); , 结果也是一样的

  where contains (Description,"sdfsdf" AND "dsfsdfds")

  select select_list

from table AS FT_TBL INNER JOIN

  containstable( tabel,column,contains_search_condition AS KEY_TBL

  ON FT_TBL.unique_key_column = KEY_TBL.[KEY]

  use AdventureWorks

select is_broker_enabled

from sys.databases

where database_id = db_id()

 

若结果是1,表明此数据库的 Server Broker 消息传递处于活动状态

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

折腾数据折腾代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值