欢迎来到个人简历网!永久域名:gerenjianli.cn (个人简历全拼+cn)
当前位置:首页 > 范文大全 > 实用文>windows下同时安装sql和sql的方法数据库教程

windows下同时安装sql和sql的方法数据库教程

2022-12-31 08:26:20 收藏本文 下载本文

“又菜又爱玩”通过精心收集,向本站投稿了9篇windows下同时安装sql和sql的方法数据库教程,以下是小编整理后的windows下同时安装sql和sql的方法数据库教程,欢迎阅读分享。

windows下同时安装sql和sql的方法数据库教程

篇1:sql数据库教程

掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete,

练掌握SQL是数据库用户的宝贵财 富。在本文中,我们将引导你掌握四条最基本的数据操作语句―SQL的核心功能―来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通SQL了。

在我们开始之前,先使用CREATE TABLE语句来创建一个表(如图1所示)。DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句―数据操作语言(DML)语句进行处理。

SQL中有四种基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。

连接查询

通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型

数据库管理系统的一个标志。

在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在

一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带

来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行

查询。

连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于

将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。

SQL-92标准所定义的FROM子句的连接语法格式为:

FROM join_table join_type join_table

[ON (join_condition)]

其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一

个表操作的连接又称做自连接。

join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比

较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用

的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。

外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)

和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹

配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的

数据行。

交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的

数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑

运算符等构成。

无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接

连接。例如:

SELECT p1.pub_id,p2.pub_id,p1.pr_info

FROM pub_info AS p1 INNER JOIN pub_info AS p2

ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

(一)内连接

内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分

三种:

1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接

表中的所有列,包括其中的重复列。

2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些

运算符包括>、>=、<=、<、!>、!<和>。

3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询

结果集合中所包括的列,并删除连接表中的重复列。

例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

SELECT *

FROM authors AS a INNER JOIN publishers AS p

ON a.city=p.city

又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):

SELECT a.*,p.pub_id,p.pub_name,p.country

FROM authors AS a INNER JOIN publishers AS p

ON a.city=p.city

(二)外连接

内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件

的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外

连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。

如下面使用左外连接将论坛内容和作者信息连接起来:

SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b

ON a.username=b.username

下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

SELECT a.*,b.*

FROM city as a FULL OUTER JOIN user as b

ON a.username=b.username

(三)交叉连接

交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数

据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等

于6*8=48行。

SELECT type,pub_name

FROM titles CROSS JOIN publishers

ORDER BY type

UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联

合查询。UNION的语法格式为:

select_statement

UNION [ALL] selectstatement

[UNION [ALL] selectstatement][…n]

其中selectstatement为待联合的SELECT查询语句。

ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一

行。

联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语

句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。

在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选

择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类

型,系统将低精度的数据类型转换为高精度的数据类型。

在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:

查询1 UNION (查询2 UNION 查询3)

INSERT语句

用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句:

INSERT INTO EMPLOYEES VALUES

('Smith','John','1980-06-10',

'Los Angles',16,45000);

通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。

我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。

如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。

回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。

同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。

对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。当然,临近,请你最好还是使用四位来表示年份。

既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分:

INSERT INTO EMPLOYEES VALUES

('Bunyan','Paul','1970-07-04',

'Boston',12,70000);

INSERT INTO EMPLOYEES VALUES

('John','Adams','1992-01-21',

'Boston',20,100000);

INSERT INTO EMPLOYEES VALUES

('Smith','Pocahontas','1976-04-06',

'Los Angles',12,100000);

INSERT INTO EMPLOYEES VALUES

('Smith','Bessie','1940-05-02',

'Boston',5,00);

INSERT INTO EMPLOYEES VALUES

('Jones','Davy','1970-10-10',

'Boston',8,45000);

INSERT INTO EMPLOYEES VALUES

('Jones','Indiana','1992-02-01',

'Chicago',NULL,NULL);

在最后一项中,我们不知道Jones先生的工薪级别和年薪,所以我们输入NULL(不要引号),

NULL是SQL中的一种特殊情况,我们以后将进行详细的讨论。现在我们只需认为NULL表示一种未知的值。

有时,像我们刚才所讨论的情况,我们可能希望对某一些而不是全部的列进行赋值。除了对要省略的列输入NULL外,还可以采用另外一种INSERT语句,如下:

INSERT INTO EMPLOYEES(

FIRST_NAME, LAST_NAME,

HIRE_DATE, BRANCH_OFFICE)

VALUE(

'Indiana','Jones',

'1992-02-01','Indianapolis');

这样,我们先在表名之后列出一系列列名。未列出的列中将自动填入缺省值,如果没有设置缺省值则填入NULL。请注意我们改变了列的顺序,而值的顺序要对应新的列的顺序。如果该语句中省略了FIRST_NAME和LAST_NAME项(这两项规定不能为空),SQL操作将失败。

让我们来看一看上述INSERT语句的语法图:

INSERT INTO table

[(column { ,column})]

VALUES

(columnvalue [{,columnvalue}]);

和前一篇文章中一样,我们用方括号来表示可选项,大括号表示可以重复任意次数的项(不能在实际的SQL语句中使用这些特殊字符)。VALUE子句和可选的列名列表中必须使用圆括号。

SELECT语句

SELECT语句可以从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。实际上,仅仅是访问数据库来分析数据并生成报表的人可以对其他SQL语句一窍不通。

SELECT语句的结果通常是生成另外一个表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中。在直接SQL(direct SQL)中,它将结果显示在终端的显示屏上,或者将结果送到打印机或文件中。也可以结合其他SQL语句来将结果放到一个已知名称的表中。

SELECT语句功能强大。虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选择”(或称“限制”),但实际上它也可以完成其他两种关系运算―“投影”和“连接”,SELECT语句还可以完成聚合计算并对数据进行排序。

SELECT语句最简单的语法如下:

SELECT columns FROM tables;

当我们以这种形式执行一条SELECT语句时,系统返回由所选择的列以及用户选择的表中所有指定的行组成的一个结果表。这就是实现关系投影运算的一个形式。

让我们看一下使用图1中EMPLOYEES表的一些例子(这个表是我们以后所有SELECT语句实例都要使用的。而我们在图2和图3中给出了查询的实际结果。我们将在其他的例子中使用这些结果)。

假设你想查看雇员工作部门的列表。那下面就是你所需要编写的SQL查询:

SELECT BRANCH_OFFICE FROM EMPLOYEES;

以上SELECT语句的执行将产生如图2中表2所示的结果。

由于我们在SELECT语句中只指定了一个列,所以我们的结果表中也只有一个列。注意结果表中具有重复的行,这是因为有多个雇员在同一部门工作(记住SQL从所选的所有行中将值返回)。要消除结果中的重复行,只要在SELECT语句中加上DISTINCT子句:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES;

这次查询的结果如表3所示。

现在已经消除了重复的行,但结果并不是按照顺序排列的。如果你希望以字母表顺序将结果列出又该怎么做呢?只要使用ORDER BY子句就可以按照升序或降序来排列结果:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES

ORDER BY BRANCH_OFFICE ASC;

这一查询的结果如表4所示。请注意在ORDER BY之后是如何放置列名BRANCH _OFFICE的,这就是我们想要对其进行排序的列。为什么即使是结果表中只有一个列时我们也必须指出列名呢?这是因为我们还能够按照表中其他列进行排序,即使它们并不显示出来。列名BRANCH_ OFFICE之后的关键字ASC表示按照升序排列。如果你希望以降序排列,那么可以用关键字DESC。

同样我们应该指出ORDER BY子句只将临时表中的结果进行排序;并不影响原来的表。

假设我们希望得到按部门排序并从工资最高的雇员到工资最低的雇员排列的列表。除了工资括号中的内容,我们还希望看到按照聘用时间从最近聘用的雇员开始列出的列表。以下是你将要用到的语句:

SELECT BRANCH_OFFICE,FIRST_NAME,

LAST_NAME,SALARY,HIRE_DATE

FROM EMPLOYEES

ORDER BY SALARY DESC,

HIRE_DATE DESC;

这里我们进行了多列的选择和排序。排序的优先级由语句中的列名顺序所决定。SQL将先对列出的第一个列进行排序。如果在第一个列中出现了重复的行时,这些行将被按照第二列进行排序,如果在第二列中又出现了重复的行时,这些行又将被按照第三列进行排序……如此类推。这次查询的结果如表5所示。

将一个很长的表中的所有列名写出来是一件相当麻烦的事,所以SQL允许在选择表中所有的列时使用*号:

SELECT * FROM EMPLOYEES;

这次查询返回整个EMPLOYEES表,如表1所示。

下面我们对开始时给出的SELECT语句的语法进行一下更新(竖直线表示一个可选项,允许在其中选择一项。):

SELECT [DISTINCT]

(column [{, columns}])| *

FROM table [ {, table}]

[ORDER BY column [ASC] | DESC

[ {, column [ASC] | DESC }]];

定义选择标准

在我们目前所介绍的SELECT语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行:

SELECT columns FROM tables [WHERE predicates];

WHERE子句对条件进行了设置,只有满足条件的行才被包括到结果表中。这些条件由断言(predicate)进行指定(断言指出了关于某件事情的一种可能的事实)。如果该断言对于某个给定的行成立,该行将被包括到结果表中,否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如,假如你需要查询所有姓为Jones的职员,则可以使用以下SELECT语句:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones';

LAST_NAME = 'Jones'部分就是断言。在执行该语句时,SQL将每一行的LAST_NAME列与“Jones”进行比较。如果某一职员的姓为“Jones”,即断言成立,该职员的信息将被包括到结果表中(见表6)。

使用最多的六种比较

我们上例中的断言包括一种基于“等值”的比较(LAST_NAME = 'Jones'),但是SQL断言还可以包含其他几种类型的比较。其中最常用的为:

等于 =

不等于

小于 <

大于 >

小于或等于 <=

大于或等于 >=

下面给出了不是基于等值比较的一个例子:

SELECT * FROM EMPLOYEES

WHERE SALARY >50000;

这一查询将返回年薪高于$50,000.00的职员(参见表7)。

逻辑连接符

有时我们需要定义一条不止一种断言的SELECT语句。举例来说,如果你仅仅想查看Davy Jones的信息的话,表6中的结果将是不正确的。为了进一步定义一个WHERE子句,用户可以使用逻辑连接符AND,OR和NOT。为了只得到职员Davy Jones的记录,用户可以输入如下语句:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones' AND FIRST_NAME = 'Davy';

在本例中,我们通过逻辑连接符AND将两个断言连接起来。只有两个断言都满足时整个表达式才会满足。如果用户需要定义一个SELECT语句来使得当其中任何一项成立就满足条件时,可以使用OR连接符:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones' OR LAST_NAME = 'Smith';

有时定义一个断言的最好方法是通过相反的描述来说明。如果你想要查看除了Boston办事处的职员以外的其他所有职员的信息时,你可以进行如下的查询:

SELECT * FROM EMPLOYEES

WHERE NOT(BRANCH_OFFICE = 'Boston');

关键字NOT后面跟着用圆括号括起来的比较表达式。其结果是对结果取否定。如果某一职员所在部门的办事处在Boston,括号内的表达式返回true,但是NOT操作符将该值取反,所以该行将不被选中。

断言可以与其他的断言嵌套使用。为了保证它们以正确的顺序进行求值,可以用括号将它们括起来:

SELECT * FROM EMPLOYEES

WHERE (LAST_NAME = 'Jones'

AND FIRST_NAME = 'Indiana')

OR (LAST_NAME = 'Smith'

AND FIRST_NAME = 'Bessie');

SQL沿用数学上标准的表达式求值的约定―圆括号内的表达式将最先进行求值,其他表达式将从左到右进行求值。

篇2:学习SQL 文档数据库教程

数据库: SQL Sever 2000

注意:

如果你将SQL Sever配置为使用完整安全或混合安全,那么你可以使用可信连接,如果你使用标准安全,你则需要提供用户 帐号 和密码。

库名:  pubs (包含一个虚拟的出版商使用的各个表;安装好就有的,本文例子就用此表讲解)

调试工具: SQL 查询分析器 (允许执行交互的SQL查询,在把查询语句写进程序之前进行测试是非常有用的。)

选库 :  在查询窗口顶部的 DB下拉框中选择数据库pubs,这样你就选择了数据库。

1         例子

1.1       记录查询 ( 附 :有编号)

1.1.1   简单SELECT查询语句

1.1.1.1 描述:

SELECT 字段 1, 字段 2, …… FROM 表 [WHERE 条件]

1.1.1.2 SQL语句:

“ SELECT au_lname, phone FROM authors

” SELECT * FROM authors WHERE au_lname ='Ringer'

1.1.1.3 结果:

1.1.1.4  注意:

1.1.2   操作多个表

1.1.2.1 描述:

1.1.2.2 Sql 语句

“ SELECT au_lname ,title  FROM  authors, titles

” SELECT title,pub_name FROM titles,publishers WHERE titles.pub_id=publishers.pub_id

1.1.2.3 结果:

1.1.2.4 注意:

1.1.3  操作字段

1.1.3.1 描述:

1.1.3.2 Sql 语句

“ SELECT  phone as '电话号码' FROM authors WHERE au_lname ='Ringer'

” SELECT  phone '电话号码' FROM authors WHERE au_lname ='Ringer'

“ SELECT  price * 2 FROM titles

” SELECT  price  “Original price”, price * 2 “New price” FROM  titles

1.1.3.3 结果:

1.1.3.4 注意:

你可以使用大多数标准的数学运算符来操作字段值,如加(+),减(-),乘(*)和除(/)。

你也可以一次对多个字段进行运算.

1.1.4  排序查询结果

1.1.4.1 描述:

1.1.4.2 Sql 语句

“ SELECT au_lname FROM  authors  ORDER  BY  au_lname

” SELECT au_lname ,au_fname FROM authors ORDER BY au_lname ,au_fname

“ SELECT au_lname,au_fname FROM authors ORDER BY au_lname ,au_fname DESC

1.1.4.3 结果:

1.1.4.4 注意:

警告:

不是特别需要时,不要对查询结果进行排序,因为服务器完成这项工作要费些力气。这意味着带有ORDER BY 子句的SELECT语句执行起来比一般的SELECT语句花的时间长。

1.1.5  取出互不相同的记录

1.1.5.1 描述:

1.1.5.2 Sql 语句

” SELECT DISTINCT au_lname FROM authors WHERE au_lname = 'Ringer'

1.1.5.3 结果:

1.1.5.4 注意:

警告:

如同ORDER BY子句一样,强制服务器返回互不相同的值也会增加运行开销,

福气不得不花费一些时间来完成这项工作。因此,不是必须的时候不要使用关键字DISTINCT。

1.1.6  集合函数

1.1.6.1 描述:

? 可以统计记录数目,平均值,最小值,最大值,或者求和。

1.1.6.2 Sql 语句

“ SELECT AVG( lowqty ) 'the_average' FROM discounts

” SELECT COUNT( au_lname ) FROM authors WHERE au_lname= 'Ringer'

“ SELECT COUNT( DISTINCT au_lname ) FROM authors WHERE au_lname= 'Ringer'

” SELECT COUNT( * ) FROM authors WHERE au_lname= 'Ringer'

“ SELECT SUM( min_lvl ) FROM jobs

” SELECT MAX( min_lvl ) FROM jobs

“ SELECT MIN( min_lvl ) FROM jobs

1.1.6.3 结果:

1.1.6.4 注意:

1.1.7  通过匹配来取出数据

1.1.7.1 描述:

? 百分号是通配符的例子之一。它代表 0个或多个字符。

? 中括号([])用来匹配处在指定范围内的单个字符。

? '[ABC]%'任何一个其名字以这些字符中的任一个开头记录都将被返回。

? 脱字符( ^)来排除特定的字符。

? 通过使用下划线字符( _),你可以匹配任何单个字符。

1.1.7.2 Sql 语句

” SELECT royalty FROM titles WHERE royalty >= 10  AND  royalty <= 12

“ SELECT royalty FROM titles WHERE royalty BETWEEN 10 AND 12

” SELECT royalty FROM titles WHERE royalty NOT BETWEEN 10 AND 12

“ SELECT royalty FROM titles WHERE royalty = 10  OR  royalty = 12

” SELECT royalty FROM titles WHERE royalty IN (10,12)

“ SELECT type FROM titles WHERE type LIKE '%popular_comp%'

” SELECT type FROM titles WHERE type LIKE '[A-M ]%'

“ SELECT type FROM titles WHERE type LIKE '[ABC]%'

” SELECT type FROM titles WHERE type LIKE '[a-fm]%'

“ SELECT type FROM titles WHERE type LIKE '[^(a-fmt)]%'

1.1.7.3 结果:

1.1.7.4 注意:

注意:

如果你想匹配百分号或下划线字符本身,你需要把它们括在方括号中。如果你想匹配连字符 (-),应把它指定为方括号中的第一个字符。如果你想匹配方括号,应把它们也括在方括号中。例如,下面的语句返回所有其描述中包含百分号的站点:

1.1.8  转换数据

1.1.8.1 描述:

? SQL Sever 把大部分数值从一种类型转换为另一种类型。例如,要比较SMALLINT型和INT型数据的大小,你不需要进行显式的类型转换。SQL Sever会为你完成这项工作。

? 当想在字符型数据和其它类型的数据之间进行转换时,需要自己进行转换操作。

? 函数 CONVERT( )

1.1.8.2 Sql 语句

” SELECT CONVERT( CHAR(8),price) + '$' as '钱' FROM titles

1.1.8.3 结果:

1.1.8.4 注意:

函数 CONVERT( ) 带有两个变量。第一个变量指定了数据类型和长度。第二个变量指定了要进行转换的字段。

篇3:PL/SQL过程数据库教程

要想利用PL/SQL程序完成比较完整的数据库任务,需要进一步学习一些高级设计要素的内容,前面编写执行的PL/SQL程序,共同的特点是没有名称,只能存储为文件,然后通过执行文件的方式执行,因此称为无名块。与此对应的是在PL/SQL中也引入了高级程序设计的一些概念,其中最重要的就是过程。

过程就是高级程序设计语言中的模块的概念,将一些内部联系的命令组成一个个过程,通过参数在过程之间传递数据是模块化设计思想的重要内容。

创建过程

1. 过程的语法结构

完整的过程结构如下:

create or replace procedure 过程名 as

声明语句段;

begin

执行语句段;

exception

异常处理语句段;

end;

2. 过程的特点

过程是有名称的程序块,as关键词代替了无名块的declare。

3. 创建过程实例

在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序将创建名为tempprocedure的过程,create是创建过程的标识符,replace表示若同名过程存在将覆盖原过程。该过程定义了一个变量,其类型和testtable数据表中的currentdate字段类型相同,都是日期型,将数据表中的recordnumber字段为88的currentdate字段内容送入变量中,然后输出结果。

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

set serveroutput on

create or replace procedure tempuser.tempprocedure as

tempdate tempuser.testtable.currentdate%type;

begin

select currentdate

into tempdate

from testtable

where recordnumber=88;

dbms_output.put_line(to_char(tempdate));

end;

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

【配套程序位置】:第9章\ createprocedure.sql。

执行结果如图9.41所示。

查询过程

登录【企业管理器】,在【管理目标导航树】里选择【网络】/【数据库】/【myoracle.mynet】/【方案】/【过程】/【TEMPUSER】选项,出现如图9.42所示的创建好的过程。

修改过程

(1)在【SQLPlus Worksheet】的【菜单栏】选择【文件】/【打开】菜单命令,将创建过程的createprocedure.sql文件调出进行修改,修改完毕后重新执行创建过程。

(2)在【企业管理器】里选中要修改的过程,用鼠标右键单击,在出现的快捷菜单里选择【查看/编辑详细资料】选项,如图9.43所示。

(3)出现如图9.44所示的编辑过程的【一般信息】选项卡。在【文本编辑区】可以编辑该过程,单击“确定”按钮将更新该过程,单击“编译”按钮将编译该过程的 PL/SQL 源代码,使该过程可以在数据库中存储和执行。

执行过程

要执行创建的过程,必须通过主程序来调用过程。

在【SQLPlus Worksheet】中执行下列PL/SQL程序,执行结果如图9.45所示。

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

set serveroutput on

begin

tempprocedure;

end;

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

【配套程序位置】:第9章\ executeprocedure.sql,

在Oracle中,创建好的过程可以被任何程序调用。

带参数的过程

前面介绍的过程没有参数,主程序和过程没有数据的传递,下面介绍带参数的过程的设计和使用。

1. 参数类型

在PL/SQL过程中,可以有3种类型的参数。

in参数:读入参数,主程序向过程传递参数值。

out参数:读出参数,过程向主程序传递参数值。

in out 参数:双向参数,过程与主程序双向交流数据。

2. 定义带参数的过程

在下面的PL/SQL程序代码中,将创建三个调用参数。

tempdeptno:类型为in,与scott.dept.deptno的类型一致,为数值型。

tempdname:类型为out,与scott.dept.dname的类型一致,为字符型。

temploc:类型为in out,与scott.dept.loc类型一致,为字符型。

创建两个过程内参数。

loc1:与scott.dept.loc的类型一致,为字符型。

dname1:与scott.dept.dname的类型一致,为字符型。

该带参数的过程的功能是从数据表scott.dept中寻找deptno字段等于tempdeptno调用参数值的dname和loc字段,和其他字符组合,送给两个出口参数。

以system用户名、sysdba身份登录【SQLPlus Worksheet】,执行下列PL/SQL程序,执行结果如图9.46所示。

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

Set serveroutput on

create or replace procedure scott.tempprocedure(

tempdeptno in scott.dept.deptno%type,

tempdname out scott.dept.dname%type,

temploc in out scott.dept.loc%type)as

loc1 scott.dept.loc%type;

dname1 scott.dept.dname%type;

begin

select loc into loc1

from scott.dept

where deptno=tempdeptno;

select dname into dname1

from scott.dept

where deptno=tempdeptno;

temploc:='地址:'||loc1;

tempdname:='姓名'||dname1;

end;

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

【配套程序位置】:第9章\ createscottprocedure.sql。

调用参数分割用“,”号。

3. 使用带参数的过程

在主程序中的实际参数和过程中的形式参数的传递有很多种办法,这里推荐读者采用一一对应的办法,按对应的位置传递参数。要求实际参数和形式参数在数据类型和位置排列上做到完全一致。

在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序调用带参数的过程scott.tempprocedure,实际参数为(10,’’,’’)

执行结果如图9.47所示。

【配套程序位置】:第9章\ executescottprocedure.sql。

读者可以尝试改变参数值,然后测试过程执行结果。

篇4:SQL MSSQL 常用代码数据库教程

/*********************************************************/

function:SQL MSSQL TECHNOLOGY ARTICLE

file :SQL-MSSQL.TXT

author :chinayaosir QQ:44633197

Tools :MSSQL QUERY ANALYSIS

date :4/01/

blog :blog.csdn.net/chinayaosir

note :禁止其它网站此文章

/*********************************************************/

目录清单CONTEXT LIST

/*********************************************************/

1.数据库DataBase

1.1数据库建立/删除create/drop database

1.2数据库备份与恢复backup/restore database

/*********************************************************/

2.数据查询DATA QUERY LANGUAGE

2.1选择查询Select Query

2.2聚集查询Aggregate Query

2.3子查询 Sub Query

2.4连接查询Table Joins

2.5汇总查询Group Query

/*********************************************************/

3.数据修改DATA MODIFY LANGUAGE

3.1插入数据Insert

3.2修改数据Update

3.3删除数据Delete

/*********************************************************/

4.数据定义DATA DEFINE LANGUAGE

4.1表Table

4.2列Column

4.3序列Identity

4.4约束Constraints

4.5索引Index

4.6视图view

4.7权限Privilege

/*********************************************************/

5.数据库函数Functions

5.1转换函数Data Convert Functions

5.2聚集函数Aggregate Functions

5.3字符函数char Functions

5.4日期函数Date Functions

5.5数学函数Math Functions

5.6分析函数Analytical Functions

/*********************************************************/

6.数据库脚本Script

6.1数据类型Data Types

6.2脚本语法Statements

6.3脚本游标Cursor

6.4存储过程Procedure

6.5存储函数Function

6.6触发器Trigger

6.7事务Transaction

6.8其它Other

/*********************************************************/

SQL明细 SQL DETAIL

/**********************************************************/

1.数据库DataBase

1.1数据库建立/删除create/drop database

1.2备份与恢复backup/restore database

/**********************************************************/

1.1数据库建立/删除create/drop database

1.1.1.建立数据库

语法:create database <数据库名>[其它参数]

代码:

//建立数据库 hr

create database hr

1.1.2.删除数据库,

语法:drop database <数据库名>

代码:

//删除数据库hr

drop database hr

//如果存在hr数据库,则删除数据库hr

IF DB_ID('hr') IS NOT NULL

DROP DATABASE TestDB

-----------------------------------------------------------

1.2备份与恢复backup/restore database

1.2.1.添加备份设备

语法:sp_addumpdevice

代码:

//添加备份设备为本地硬盘

sp_addumpdevice 'disk', 'localbackup', 'e:\database\backup\localbak.bak'

//备份到网络硬盘

sp_addumpdevice 'disk', 'netbackup', '\\computer1\database\backup\netbak.bak'

//备份到磁带

sp_addumpdevice 'tape', 'tapebackup', '\\.\tape1bak'

//备份到命名管道

sp_addumpdevice 'pipe', 'pipebackup', 'e:\database\backup\pipebak'

1.2.2.备份数据库

语法:backup database to disk=

代码:

//备份数据库到备份设备

backup database pubs to localbackup

//备份数据库到指定路径下面的指定文件

backup database pubs to disk='e:\database\backup\pubsbak.bak'

1.2.3.恢复数据库

语法:restore database from disk=

代码:

//从备份设备中恢复数据库

restore database pubs from localbackup

//从备份文件中恢复数据库

/**********************************************************/

2.数据查询DATA QUERY LANGUAGE

2.1选择查询Select Query

2.2子查询 Sub Query

2.3连接查询Table Joins

2.4汇总查询Group Query

-----------------------------------------------------------

2.1选择查询Select Query

语法:

select [top n][/all]/[distinct] [*] / [columnlist...] [

from (...) [as alias]

[where search expression...]

[group by groupnamelist ....]

[having search-expression...]

[order by sort-expression...]

//select选项说明:

top n:只显示第一条到n条记录

//重复与不重复记录

all:表示包含重复的记录

distinct:表示去掉重复的记录

//所有字段与选中字段和字段别名

*:表示所有的列名

columnlist:表示字段列表

columnlist as alias:表示字段的别名

//其它字段

const-expression:常量表达式(如数字/字符串/日期/时间常量)

sql-expression:常见的sql语句的加减乘除表达式运算字段

function expression:数据库函数和自定义函数字段

//测试条件

比较测试条件(=,,>,<,>=,<=)

范围测试条件(betweeen 下限值 and 上限值)

成员测试条件(in,not in)

存在测试条件(exists,not exists)

匹配测试条件(like)

限定测试条件(any,all)

空值测试条件(is null)

//复合搜索条件(and, or,not,)

and:逻辑与运算

and:逻辑或运算

not:逻辑非运算

():可改变优先级的运算符

//子句说明

select子句:指出检索的数据项

from 子句:指出检索的数据表

where 子句:指出检索的数据条件

group by子句:指出检索的数据进行汇总

having子句:指出检索的数据进行汇总之前的条件

order by子句:指出检索的数据条件进行排序

代码:

//所有字段方式显示orders全部记录

select * from orders

//按字段显示全部记录

select order_num,order_date,amount from orders

//按字段显示全部记录,但除掉重复的记录

select order_num,order_date,amount from orders

//用sql-expression乘运算计算列

select amount,amount*0.08 as discount_amt from orders

//用自定义函数计算指定列

select order_num,order_date,amount,f_amt_to_chn(amount) as 金额 from orders

select选项太多,代码例子就省略...

-----------------------------------------------------------

2.2子查询 Sub Query

语法:select ...

from

where / having column 测试条件 (Sub Query)

//测试条件

比较测试条件(=,,>,<,>=,<=)

范围测试条件(betweeen 下限值 and 上限值)

成员测试条件(in,not in)

存在测试条件(exists,not exists)

匹配测试条件(like)

限定测试条件(any,all)

空值测试条件(is null)

代码:

//列出没有完成销售目标10%的销售人员清单[<测试>

select name from salesreps where quota < (0.1 * select sum(target) from offices))

//列出公司的销售目标超过各个销售人员定额总和的销售点[>测试]

select city from offices where target >(select sum(quota) from salesreps where rep_office=office)

//列出超过销售目标的销售点的业务人员[in测试]

select name from salesreps where office in (select office from offies where sales >target)

//列出订单大于2500元的产品名称[exists测试]

select description from products where exists (

select * from orders where product=prodct_id and amount >2500.00

)

//列出完成销售目标10%的销售人员清单[any测试]

select name from salesreps where (0.1* quota) < any(select amount from orders where rep=empl_num)

-----------------------------------------------------------

2.3连接查询Table Joins

多表连接类型可分为三类(内/外/交叉连接)

主从表或者父子表进行多表连接多以主键和外键进行关联

Outer joins(LEFT OUTER, RIGHT OUTER, and FULL OUTER joins)

left outer join:查询的结果以左边表行数为准

right outer join:查询的结果以右边表行数为准

2.3.1.内连接inner join

功能:

语法:

SELECT select_list

FROM table_1

[INNER] JOIN table_2

ON join_condition_1

[[INNER] JOIN table_3

ON join_condition_2]...

代码:

//没有where子句的内连接

SELECT *

FROM Products

INNER JOIN Suppliers

ON Products.SupplierID = Suppliers.SupplierID

//有where子句的内连接

SELECT p.ProductID, s.SupplierID, p.ProductName, s.CompanyName

FROM Products p

INNER JOIN Suppliers s

ON p.SupplierID = s.SupplierID

WHERE p.ProductID < 4

-----------------------------------------------------------

2.3.2.外连接outer join

功能:包括三种连接LEFT OUTER, RIGHT OUTER, and FULL OUTER joins

left outer :查询的结果以左边表行数为准

right outer :查询的结果以右边表行数为准

语法:select ... from table1 [left/right/full outer join ]table2 where ...

代码:

//以Customers表行数为标准去连接Orders表

SELECT c.CustomerID, CompanyName

FROM Customers c

LEFT OUTER JOIN Orders o

ON c.CustomerID = o.CustomerID

WHERE o.CustomerID IS NULL

-----------------------------------------------------------

2.3.3.交叉连接cross join

功能:以主从表或者父子表之间的主键进行连接,最终以笛卡尔乘积运算的结果

语法:select ... from table1 cross join table2 where ...

代码:

//显示结果以表1行数*表2行数

假设Departments为4行记录

假设Jobs为3行记录

下面的显示结果为4*3=12行记录

SELECT deptname,jobdesc FROM Departments CROSS JOIN Jobs

//用关键字匹配的交叉连接

oc_head/oc_detail是主从表

oc_head(主键oc_number)

oc_detail(主键oc_number,item_number,ship_date)

SELECT h.customerid,d.item_number,d.ship_date

from oc_head as h CROSS JOIN oc_detail as d

where h.oc_number=d.oc_number

-----------------------------------------------------------

2.4汇总查询Group Query

//汇总查询相当于会计报表中的小计汇总的功能

语法: select ...

from

group by

[having search expression]

代码:

//求出每名销售人员的销售金额

select rep,sum(amount) from orders group by rep

//每个销售点分配了多少销售人员

select rep_office,count(*) from salesreps group by rep_office

//计算每名销售人员的每个客户和订单金额

select cust,rep,sum(amount) from orders group by cust,rep

//Having子句应用

select rep,avg(amount) from orders having sum(quota) >3000.00

/**********************************************************/

3.数据修改DATA MODIFY LANGUAGE

3.1插入数据Insert

3.2修改数据Update

3.3删除数据Delete

-----------------------------------------------------------

3.1插入数据Insert

3.1.1.单行插入

语法:insert into [...] values(...);

代码:

//不省略字段清单

insert into salesreps(name,age,empl_no,sales,title,hire_date,rep_office)

values('jack toms',36,111,0.00,'sales mgr','10-05-2010',13)

//省略字段清单

insert into salesreps

values('jack toms',36,111,0.00,'sales mgr','10-05-2010',13)

3.1.2.多行插入

语法:insert into [(...)] values(...)

代码:

//把一批数据批量插入到一个备份表中

insert into history_order(order_num,order_date,amount)

select order_num,order_date,amount

from orders where order_date < '01/01/'

-----------------------------------------------------------

3.2修改数据Update

语法:update set (cloumn=expression...) [where ...] [SubQuery..]

代码:

//更新所有记录

update salesreps set quota=1.05 * quota

//按条件更新表记录

update salesreps set quota=1.08 * quota where area='china'

//按子查询更新表记录

update customers set cust_rep=105

where cust_rep in (

selct empl_num from salesreps where sales < (0.8 * quota)

)

-----------------------------------------------------------

3.3删除数据Delete

语法1:delete from [where ...]

代码:

//所有删除记录

delete from orders

语法2:truncate table

代码2:

//所有删除记录

truncate table orders

//按条件删除记录

delete from orders where order_date < '01/01/2000'

/**********************************************************/

4.数据定义DATA DEFINE LANGUAGE

4.1表Table

4.2列Column

4.3序列Indentity

4.4约束Constraints

4.5索引Index

4.6视图view

4.7权限Privilege

/**********************************************************/

4.1表Table

4.1.1.建立表

语法:

create table <表名>(

<列名><数据类型>[长度] <,>

<列名...>

)

代码:

//建立公司部门表

create table tb_basic_dept(

id int not null,

name varchar(20) ,

chair varchar(20)

)

4.1.2.删除表

语法:

drop table <表名>

代码:

//删除部门表

drop table tb_basic_dept

-----------------------------------------------------------

4.2列Column

4.2.1.列添加

语法:

alter table <表名>add

<列名><数据类型>[长度] <,>

<列名...>

代码:

alter table tb_basic_dept add

remark varchar(50)

4.2.2.列删除

语法:alter table <表名>drop column <列名>

代码:

alter table tb_basic_dept drop column remark

4.2.3.列修改

语法:alter table <表名>alter column

<列名><数据类型>[长度] [null not null]

代码:

//修改工资列为dec(8,2)

alter table tb_hr_gz alter column gz dec(8,2) null

-----------------------------------------------------------

4.3序列Identity

//特别要求

IDENTITY字段数据类型只能是(int, bigint, smallint, tinyint, decimal, or numeric(x,0))

IDENTITY字段必须是not null约束

4.3.1Identity

语法:

IDENTITY([, , ]) AS column_name,

代码:

//使用Identity

CREATE TABLE MyTable (

key_col int NOT NULL IDENTITY (1,1),

abc char(1) NOT NULL

)

INSERT INTO MyTable VALUES ('a')

INSERT INTO MyTable VALUES ('b')

INSERT INTO MyTable VALUES ('c')

-----------------------------------------------------------

4.4约束Constraints

4.4.1缺省约束(default)

4.4.2非空约束(not null)

4.4.3规则约束(rule)

4.4.4检查约束(check)

4.4.5唯一约束(unique)

4.4.6主键约束(primary key)

4.4.7外键约束(foreign key)

4.4.8商业规则(business rule)

以下面两个表为例进行演示

create table tb_hr_bm(

bm varchar(20) not null ,

remark varchar(100) default ''

)

create table tb_hr_gz(

id int not null,

name varchar(30) not null,

hrid char(18) null,

workage int null ,

bm varchar(20) null,

gz real null,

remark varchar(100) null

)

hrid=身份证号码

workage=工作年数

gz=工资金额

-----------------------------------------------------------

4.4.1缺省约束(default)

语法:CREATE DEFAULT default_name AS expression

代码:CREATE DEFAULT zip_default AS 94710

-----------------------------------------------------------

4.4.2非空约束(not null)

//表的主键和其它必填字段必须为not null.

语法:create table (column-name datatype not null... )

代码:create table tb_hr_gz(id int not null,...)

-----------------------------------------------------------

4.4.3规则约束(rule)

语法:CREATE RULE rulename AS condition

代码:

//邮编号码6位100000-999999

//建立一个自定义zip类型

CREATE TYPE zip FROM CHAR(6) NOT NULL

//建立一个规则约束

CREATE RULE zip_rule AS @number >100000 and @number < 999999

//绑定规则约束到zip类型

EXEC sp_bindrule zip_rule, 'zip'

//应用自定义zip类型

2>CREATE TABLE address(

city CHAR(25) NOT NULL,

zip_code ZIP,

street CHAR(30) NULL

)

-----------------------------------------------------------

4.4.4检查约束(建立/删除)

//检查约束建立

语法:

alter table name

add constraint <检查约束名>check<取值范围表达式>

代码:

//工资添加取值范围0 ~ 1000000

方法1:

create table tb_hr_gz(

gz real default 0.0 check(gz >=0 and gz <=1000000),

...

)

方法2:

alter table tb_hr_gz

add constraint tb_hr_gz_ck check(gz >=0 and gz <=1000000)

//检查约束删除

语法:

alter table name drop constraint <检查约束名>

代码:

//删除工资的检查约束

alter table tb_hr_gz drop constraint tb_hr_gz_ck

-----------------------------------------------------------

4.4.5唯一约束

4.4.5.1.唯一约束添加

语法:

alter table name add constraint <唯一约束名>unique<列名>

代码:

//列如身份证号码是唯一的!

alter table tb_hr_gz Add constraint tb_hr_gz_uk unique(hrid)

4.4.5.2.唯一约束删除

语法:

alter table name drop constraint <唯一约束名>

代码:

alter table tb_hr_gz drop constraint tb_hr_gz_uk

-----------------------------------------------------------

4.4.6主键约束

4.4.6.1主键约束添加

语法:

alter table table_name

add constraint <主键名称>Primary Key <列名>

代码:

create table tb_hr_bm(

bm varchar(20) not null ,

remark varchar(100) default ''

)

alter table tb_hr_bm

add constraint tb_hr_bm_pk Primary Key (bm)

4.4.6.2主键约束删除

语法:

alter table table_name

drop constraint <主键名称>

代码:

alter table table_name

drop constraint tb_hr_bm_pk

-----------------------------------------------------------

4.4.7外键约束

4.4.7.1外键约束添加

语法:

alter table <表名>

add constraint <外键名>

foreign key(列名)

references <参考表名><列名>

//补充说明

常用选项是下面3项:

ON UPDATE SET NULL //级联更新

ON DELETE CASCADE //级联删除

ON DELETE SET NULL //级联置空

ON UPDATE(RESTRICTCASCADESET NULLSET DEFAULT) 表示父表更新后,子表的行为

ON DELETE(RESTRICTCASCADESET NULLSET DEFAULT) 表示父表删除后,子表的行为

RESTRICT 限制功能:父表一行记录不能更新/删除,当子表有一条记录以上时

CASCADE 级联功能:父表一行记录记录更新/删除删除,子表对应所有的记录自动更新/删除

SET NULL 置空功能:父表一行记录记录更新/删除删除,子表对应所有的记录自动为空

SET DEFAULT 默认值功能:父表一行记录记录更新/删除删除,子表对应所有的记录自动写入默认值

代码:

建立外键的主要代码

alter table tb_hr_personl_info

add constraint tb_hr_personl_info__bm_fk

foreign key(bm)

references tb_hr_bm (bm)

on update cascade

on delete cascade

//建立参考表部门

create table tb_hr_bm

(

bm varchar(20) not null ,

remark varchar(100) default ''

)

alter table tb_hr_bm

add constraint tb_hr_bm_pk Primary Key (bm)

//建立个人信息表

use hr

create table tb_hr_personl_info

(

userid int not null ,

username varchar(20) null,

bm varchar(20) null

)

/*为此表添加主键约束*/

alter table tb_hr_personl_info

add constraint tb_hr_personl_info_pk Primary Key (userid)

/*为个人信息表添加外键约束*/

alter table tb_hr_personl_info

add constraint tb_hr_personl_info__bm_fk

foreign key(bm)

references tb_hr_bm (bm)

on update cascade

on delete cascade

-----------------------------------------------------------

4.4.7.2外键约束删除

语法:

alter table <表名>

drop constraint <外键名>

代码:

//删除tb_hr_personl_info表的外键

alter table tb_hr_personl_info drop constraint tb_hr_personl_info__bm_fk;

-----------------------------------------------------------

4.4.8商业规则(business rule)

//用触发器或者存储过程来实现

-----------------------------------------------------------

4.5索引Index

//4.5.1建立索引

语法:

create index <索引名>

on <表名><列名清表>

代码:

create index tb_hr_personl_info_ix

on tb_hr_personl_info (userid)

//4.5.2删除索引

语法:

drop index <表名><.><索引名>

代码:

//删除索引名tb_hr_personl_info_ix

drop index tb_hr_personl_info.tb_hr_personl_info_ix

-----------------------------------------------------------

4.6视图view

4.6.1视图view的概念:

视图不是表,也不是表数据的备份,在数据库模式中只是select语句的集合!

-----------------------------------------------------------

4.6.2建立视图Create View

语法:

CREATE VIEW

AS

WITH CHECK OPTION

代码:

CREATE VIEW vw_customerlist

AS

SELECT *

FROM Customers

-----------------------------------------------------------

4.6.3查询视图Query view

语法:select * from viewname

代码:select * from vw_customerlist

-----------------------------------------------------------

4.6.4修改视图ALTER VIEW

语法:select * from viewname

代码:select * from vw_customerlist

-----------------------------------------------------------

4.6.5视图删除DROP VIEW

//4.6.2视图删除

语法:

drop view <视图名>

代码:

//视图删除v_hr_personl_info

drop view v_hr_personl_info

-----------------------------------------------------------

4.6.6.过滤视图Filter view

语法:

select * from viewname where/having expressions

代码:

CREATE VIEW BankersMin

AS

SELECT BankerName, BankerState

FROM Bankers

where BankerID < 5

SELECT * FROM BankersMin

WHERE BankerState = 'CA'

ORDER BY BankerName

-----------------------------------------------------------

4.6.7.可更新的视图Updatable View

语法:

CREATE VIEW

AS

SELECT statement

WITH CHECK OPTION

代码:

CREATE VIEW OregonShippers_vw

AS

SELECT ShipperID,

CompanyName,

Phone

FROM Shippers

WITH CHECK OPTION

//此视图的记录可以进行delete/update/insert

insert into values(values....)

delete from where/having expressions

update set column =values... where/having expressions

-----------------------------------------------------------

4.7权限Privilege

4.7.1数据库用户添加

语法:

sp_addlogin [ @loginame = ] 'login'

[ , [ @passwd = ] 'password' ]

[ , [ @defdb = ] 'database' ]

[ , [ @deflanguage = ] 'language' ]

[ , [ @sid = ] sid ]

[ , [ @encryptopt= ] 'encryption_option' ]

代码:

数据库testdb上面添加一个登陆用户test,密码为tt

EXEC sp_addlogin 'test', 'tt', 'testdb', 'us_english'

EXEC sp_addlogin 'yao', 'it', 'mtyjxc', 'us_english'

-----------------------------------------------------------

4.7.2数据库用户删除

语法:DROP LOGIN <登陆名称>

代码:DROP LOGIN test

-----------------------------------------------------------

4.7.3用户权限授予grant

grant语法:

GRANT privilege [, ...] ON object [, ...]

TO { PUBLIC GROUP group username }

privilege取值范围如下:

SELECT:访问声明的表/视图的所有列/字段.

INSERT:向声明的表中插入所有列字段.

UPDATE:更新声明的表所有列/字段.

DELETE:从声明的表中删除所有行.

RULE:在表/视图上定义规则 (参见 CREATE RULE 语句).

ALL:赋予所有权限.

object取值范围如下:

table

view

sequence

PUBLIC:代表是所有用户的简写.

GROUP:将要赋予权限的组 group

username:将要赋予权限的用户名.

如果成功,返回输出CHANGE信息.

代码:

GRANT all on mtyjxc to 'yao'

-----------------------------------------------------------

7.7.4用户权限解除REVOKE

REVOKE { ALL statement [ ,...n ] }

FROM security_account [ ,...n ]

ALL:

指定将删除所有适用的权限,

对于语句权限,只有 sysadmin 固定服务器角色成员可以使用 ALL。

对于对象权限,sysadmin 固定服务器角色成员、db_owne 固定数据库角色成员和数据库对象所有者都可以使用 ALL。

statement:

是要删除其权限的授权语句。语句列表可以包括:

* CREATE DATABASE

* CREATE DEFAULT

* CREATE FUNCTION

* CREATE PROCEDURE

* CREATE RULE

* CREATE TABLE

* CREATE VIEW

* BACKUP DATABASE

* BACKUP LOG

FROM:

指定安全帐户列表。

security_account:

是当前数据库内将要被删除权限的安全帐户。

安全帐户可以是:SQL Server用户,SQL Server角色。

代码:

REVOKE all ON mtyjxc.* TO yao

REVOKE all ON mtyjxc TO yao

/**********************************************************/

5.数据库函数Functions

5.1转换函数Data Convert Functions

5.2聚集函数Aggregate Functions

5.3字符函数char Functions

5.4日期函数Date Functions

5.5数学函数Math Functions

5.6分析函数Analytical Functions

-----------------------------------------------------------

5.1转换函数Data Convert Functions

5.1.1 CAST()

功能:数据类型转换

语法:CAST(expression AS data_type)

代码:

SELECT BillingDate,

BillingTotal,

CAST(BillingDate AS varchar) AS varcharDate,

CAST(BillingTotal AS int) AS integerTotal,

CAST(BillingTotal AS varchar) AS varcharTotal

FROM Billings

-----------------------------------------------------------

5.1.2 COALESCE()

功能:返回表达式列表中第一个非空值表达式的值

语法:COALESCE(expression1, expression2, ... expressionN)

代码:

SELECT BankerName,

COALESCE(CAST(BillingTotal AS varchar), 'No Billings') AS BillingTotal

FROM Bankers LEFT JOIN Billings

ON Bankers.BankerID = Billings.BankerID

ORDER BY BankerName

-----------------------------------------------------------

5.1.3 CONVERT()

功能:把表达式值转换为指定sytle的数据类型

语法:CONVERT(data_ type(), expression, )

代码:

//日期风格转换

datetime转指定日期格式style. number清单

Number Style. Number Output Type Style

- 0 or 100 Default mon dd yyyy hh:miAM (or PM)

1 101 USA mm/dd/yyyy

2 102 ANSI yyyy.mm.dd

3 103 British/French dd/mm/yyyy

4 104 German dd.mm.yyyy

5 105 Italian dd-mm-yyyy

6 106 - dd mon yyyy

7 107 - mon dd, yyyy

10 110 USA mm-dd-yy

11 111 JAPAN yy/mm/dd

12 112 ISO yymmdd

14 114 - hh:mi:ss:mmm (24h)

//字符串转数字

CONVERT (INTEGER , '12345')

//字符转日期

CONVERT(datetime, '20000704')

CREATE TABLE my_date (Col1 datetime)

GO

INSERT INTO my_date VALUES (CONVERT(char(10), GETDATE(), 112))

GO

drop table my_date;

GO

-----------------------------------------------------------

5.1.4 ISNULL()

功能:检查check_expression是空值,就用replacement_value替代

语法:ISNULL(check_expression, replacement_value)

代码:

SELECT BillingDate,

ISNULL(BillingDate, '1900-01-01') AS NewDate

FROM Billings

-----------------------------------------------------------

5.1.5 NULLIF()

功能:两个表达式相等,返回null,否则返回第1个表达式

语法:ISNULL(expression1, expression2)

代码:

DECLARE @Value1 int

DECLARE @Value2 int

SET @Value1 = 55

SET @Value2 = 955

SELECT NULLIF(@Value1, @Value2)

GO

输出

55

DECLARE @Value1 int

DECLARE @Value2 int

SET @Value1 = 55

SET @Value2 = 55

SELECT NULLIF(@Value1, @Value2)

GO

输出

NULL

-----------------------------------------------------------

5.2聚集函数Aggregate Functions

语法:select AggregateFunctions(column-name)

sum(column-name):计算字段总和

avg(column-name):计算字段平均值

min(column-name):计算字段最小值

max(column-name):计算字段最大值

count(column-name):计算字段非空值的个数

count(*):计算查询结果的记录个数

代码:

//use pubs

select sum(qty) as sum_qty,

avg(qty) as avg_qty,

min(qty) as min_qty,

max(qty) as max_qty,

count(qty) as count_qty,

count(*) as total_qty

from sales

-----------------------------------------------------------

5.3字符函数char Functions

1. ASCII()

//函数返回字符表达式最左端字符的ASCII 码值

2. Char()

//函数用于将ASCII 码转换为字符--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL

3. CHARINDEX()

//函数返回字符串中某个指定的子串出现的开始位置

4. DIFFERENCE()

5. FORMATMESSAGE()

6. LEFT()

7. LEN()

8. LOWER()

//函数把字符串全部转换为小写

9. LTRIM()

//函数把字符串头部的空格去掉

10.nchar()

11.PATINDEX()

12.QUOTENAME()

13.REPLACE()

//函数返回被替换了指定子串的字符串

14.REPLICATE()

/函数返回一个重复指定次数的字符串

15.REVERSE()

//函数将指定的字符串的字符排列顺序颠倒

16.Right()

17.RTRIM()

/函数把字符串尾部的空格去掉

18.SOUNDEX()

19.SPACE()

//函数返回一个有指定长度的空白字符串

20.STR()

//函数把数值型数据转换为字符型数据

21.STUFF()

//函数用另一子串替换字符串指定位置长度的子串

22.SUBSTRING()

//函数返回子字符串

23.UNICODE()

24.UPPER()

//函数把字符串全部转换为大写

-----------------------------------------------------------

5.4日期函数Date Functions

5.4.1. CURRENT_TIMESTAMP

功能:

得到当前数据库的日期

代码:

//直接得到当前日期

SELECT CURRENT_TIMESTAMP

go

//调用变量中的当前日期

DECLARE @today datetime

SELECT @today = current_timestamp

select @today

go

-----------------------------------------------------------

5.4.2. 日期计算Date calculation

功能:日期计算

代码:

DECLARE @MonthChar VarChar(2), @DayChar VarChar(2), @DateOut Char(8)

SET @MonthChar = CAST(MONTH(GETDATE()) AS VarChar(2))

SET @DayChar = CAST(DAY(GETDATE()) AS VarChar(2))

--自动补齐月份到2位

IF LEN(@MonthChar) = 1

SET @MonthChar = '0'+@MonthChar

IF LEN(@DayChar) = 1

SET @DayChar = '0' + @DayChar

--生成日期字符串

SET @DateOut = @MonthChar + @DayChar + CAST(YEAR(GETDATE()) AS Char(4))

SELECT @DateOut

GO

运行结果是mmddyyyy格式的字符串

-----------------------------------------------------------

5.4.3. DATEADD()

功能:日期相加或者相减n天后的日期

语法:DATEADD(what_to_add,number_to_add,date_to_add_it_to)

代码:

//4-29-加90天,保存到day

SELECT DATEADD(DY, 90,'4-29-2009')

GO

//4-29-2009减60天,保存到day

SELECT DATEADD(DY, -60,'4-29-2009')

GO

-----------------------------------------------------------

5.4.4. DATEDIFF()

功能:日期相加或者相减n天后的日期

语法:DATEDIFF ( datepart , startdate , enddate )

datepart列表:

day:单位=天

month:单位=月

year:单位=年

hour:单位=小时

minute:单位=分

second:单位=秒

week:单位=周

代码:

//10/01/2009国庆到今天的天数

SELECT DATEDIFF(day,'10/1/2009',CURRENT_TIMESTAMP)

GO

//10/01/2009国庆到今天的月数

SELECT DATEDIFF(month,'10/1/2009',CURRENT_TIMESTAMP)

GO

//10/01/2009国庆到今天的年数

SELECT DATEDIFF(year,'10/1/2009',CURRENT_TIMESTAMP)

GO

//10/01/2009国庆到今天的周数

SELECT DATEDIFF(week,'10/1/2009',CURRENT_TIMESTAMP)

GO

-----------------------------------------------------------

5.4.5. DATEFIRST()

功能:设置或者查询一周的第一天

SELECT @@DATEFIRST 'First Day of the Week'

GO

value is 7

SELECT DATEPART(weekday, CAST('20091001' AS DATETIME) + @@DATEFIRST);

GO

value is 3

-----------------------------------------------------------

6. DATEFORMAT()

功能:设置日期格式

语法:SET DATEFORMAT

format(ymd,mdy,dmy)

代码:set dataformat mdy

-----------------------------------------------------------

7. DATENAME()

功能:日期date按datepart风格之后变成字符串

语法:DATENAME (datepart,date)

datepart列表(day,month,year,hour,minute,second,week,weekday)

代码:

select datename(day,CURRENT_TIMESTAMP)

select datename(month,CURRENT_TIMESTAMP)

select datename(year,CURRENT_TIMESTAMP)

select datename(hour,CURRENT_TIMESTAMP)

select datename(minute,CURRENT_TIMESTAMP)

select datename(week,CURRENT_TIMESTAMP)

select datename(weekday,CURRENT_TIMESTAMP)

-----------------------------------------------------------

8. DATEPART()

功能:日期date按datepart风格之后变成字符串

语法:DATENAME (datepart,date)

datepart列表(day,month,year,hour,minute,second,week,weekday)

代码:

-----------------------------------------------------------

9. Day()

功能:求日期的天

语法:day(date)

代码:select day(CURRENT_TIMESTAMP)

-----------------------------------------------------------

10. GETDATE()

功能:求当前日期和时间

语法:GETDATE()

代码:select GETDATE() 和select CURRENT_TIMESTAMP相同

-----------------------------------------------------------

11. GETUTCDATE()

-----------------------------------------------------------

12. ISDATE()

-----------------------------------------------------------

13. MONTH()

功能:求日期的月

语法:MONTH(date)

代码:select month(CURRENT_TIMESTAMP)

-----------------------------------------------------------

14. Year()

功能:求日期的年

语法:Year(date)

代码:select Year(CURRENT_TIMESTAMP)

-----------------------------------------------------------

5.5数学函数Math Functions

1. ABS()

2. ACOS()

3. ASIN()

4. ATAN()

5. CEILING()

6. COS()

7. COT()

8. DEGREES()

9. EXP()

10. FLOOR()

11. ISNUMERIC()

12. LOG()

13. LOG10()

14. PI()

15. Power()

16. RADIANS()

11. 17. RAND()

18. ROUND()

19. SIGN()

20. Sin()

21. SQRT()

22. SQUARE()

23. TAN()

-----------------------------------------------------------

5.6分析函数Analytical Functions

1. COMPUTE()

2. CUBE()

3. DENSE_RANK()

4. GROUPING()

5. NTILE()

6. PARTITION()

7. PIVOT()

8. ROLLUP()

9. ROW_NUMBER()

10. STDEV()

11. STDEVP()

12. VAR()

13. VARP()

/**********************************************************/

6.Transact SQL

6.1数据类型Data Types

6.2脚本语法sytanx

6.3脚本游标Cursor

6.4存储过程Procedure

6.5存储函数Function

6.6触发器Trigger

6.7事务Transaction

6.8其它other

/**********************************************************/

6.1数据类型Data Types

1. bigint

2. bit

3. bitwise operators

4. Char

5. collate

6. Create Type

7. Data type

8. Date Type

9. datetime

10. decimal

11. Float

12. FULLTEXT

13. integer

14. Large Text

15. money

16. nchar

17. nVarChar

18. OPENROWSET

19. READTEXT

20. smalldatetime

21. Smallint

22. SQL_VARIANT

23. text

24. TEXTPTR

25. timestamp

26. VARBINARY

27. VARCHAR

28. WRITETEXT

29. Unicode

-----------------------------------------------------------

6.2脚本语法syntax

6.2.0局部/全局变量定义

局部变量 (以@开头)

格式:declare @变量名 数据类型

代码:declare @x int

全局变量 (必须以@@开头)

格式:declare @@变量名 类型

代码:select @@id = '10010001'

6.2.1块语句

格式:

begin

...

end

-----------------------------------------------------------

6.2.2赋值语句set/select

set @id = '10010001'

select @id = '10010001'

6.2.3条件语句(if/case)

6.2.3.1 if语句

declare @x int @y int @z int

select @x = 1 @y = 2 @z=3

if @x >@y

print 'x >y' --打印字符串'x >y'

else if @y >@z

print 'y >z'

else print 'z >y'

6.2.3.2 CASE语句

--CASE

复制代码代码如下:

use pangu

update employee

set e_wage =

case

when job_level = '1' then e_wage*1.08

when job_level = '2' then e_wage*1.07

when job_level = '3' then e_wage*1.06

else

e_wage*1.05

end

6.2.4循环语句(while)

--WHILE

复制代码代码如下:

declare @x int @y int @c int

select @x = 1 @y=1

while @x < 3

begin

print @x --打印变量x 的值

while @y < 3

begin

select @c = 100*@x + @y

print @c --打印变量c 的值

select @y = @y + 1

end

select @x = @x + 1

select @y = 1

end

6.2.5定时执行(waitfor)

--WAITFOR

--例 等待1 小时2 分零3 秒后才执行SELECT 语句

waitfor delay '01:02:03'

select * from employee

--例 等到晚上11 点零8 分后才执行SELECT 语句

waitfor time '23:08:00'

select * from employee

-----------------------------------------------------------

6.3脚本游标Cursor

//游标应用顺序

1.DECLARE --为查询设定游标

2.OPEN --检索查询结果打开一个游标

3.FETCH --检索一行查询结果

4.CLOSE / DEALLOCATE--关闭游标或者重新分配游标

语法:

DECLARE <游标名称>CURSOR FOR(select sql)

OPEN <游标名称>

while @@fetch_status = 0

begin

FETCH NEXT FROM <游标名称>INTO <变量名清单>

{其它代码处理}

end

CLOSE <游标名称>

代码1:

复制代码代码如下:

/*带游标的存储过程*/

create procedure p_fill_remark_tb_hr_gz

as

declare @id1 int

declare @name1 varchar(30)

declare @bm1 varchar(20)

begin

declare cursor1 cursor for select id,name,bm from tb_hr_gz

open cursor1

fetch next from cursor1 into @id1,@name1,@bm1

while @@fetch_status 0

begin

update tb_hr_gz set remark=@name1+'-'+@bm1 where id=@id1

fetch next from cursor1 into @id1,@name1,@bm1

end

close cursor1

end

//测试带游标的存储过程

EXEC dbo.p_fill_remark_tb_hr_gz

-----------------------------------------------------------

6.4存储过程Procedure

//存储过程建立

语法:

create procedure <存储过程名>(

[输入参数列表],[返回参数列表 output]

)

as

[局部变量定义]

begin

{语句体}

end

代码:

create procedure p_update_name_tb_hr_gz(@id int,@newname varchar(30))

as

begin

if (exists(select * from tb_hr_gz where id=@id))

begin

update tb_hr_gz set name=@newname where id=@id

end

end

//测试

EXEC dbo.p_update_name_tb_hr_gz '112','chenglei'

//存储过程删除

语法:

drop procedure <存储过程名>

代码:

drop procedure p_update_name_tb_hr_gz

-----------------------------------------------------------

6.5存储函数Function

//存储函数建立

语法:

CREATE FUNCTION <函数名>(参数变量列表)

[返回值RETURNS 数据类型] [WITH ENCRYPTION]

AS

BEGIN

{函数代码体....}

END

代码:

复制代码代码如下:

//函数f_amt_to_eng()功能:数字金额转换为英文字母金额

CREATE FUNCTION f_amt_to_eng(@num numeric(15,2))

RETURNS varchar(400) WITH ENCRYPTION

AS

BEGIN

DECLARE @i int,@hundreds int,@tenth int,@one int

DECLARE @thousand int,@million int,@billion int

DECLARE @numbers varchar(400),@s varchar(15),@result varchar(400)

SET @numbers='one two three four five '

+'six seven eight nine ten '

+'eleven twelve thirteen fourteen fifteen '

+'sixteen seventeen eighteen nineteen '

+'twenty thirty forty fifty '

+'sixty seventy eighty ninety '

SET @s=RIGHT('000000000000000'+CAST(@num AS varchar(15)),15)

SET @billion=CAST(SUBSTRING(@s,1,3) AS int)--将12位整数分成4段:十亿、百万、千、百十个

SET @million=CAST(SUBSTRING(@s,4,3) AS int)

SET @thousand=CAST(SUBSTRING(@s,7,3) AS int)

SET @result=''

SET @i=0

WHILE @i<=3

BEGIN

SET @hundreds=CAST(SUBSTRING(@s,@i*3+1,1) AS int)--百位0-9

SET @tenth=CAST(SUBSTRING(@s,@i*3+2,1) AS int)

SET @one=(CASE @tenth WHEN 1 THEN 10 ELSE 0 END)+CAST(SUBSTRING(@s,@i*3+3,1) AS int)--个位0-19

SET @tenth=(CASE WHEN @tenth<=1 THEN 0 ELSE @tenth END)--十位0、2-9

IF (@i=1 and @billion>0 and (@million>0 or @thousand>0 or @hundreds>0)) or

(@i=2 and (@billion>0 or @million>0) and (@thousand>0 or @hundreds>0)) or

(@i=3 and (@billion>0 or @million>0 or @thousand>0) and (@hundreds>0))

SET @result=@result+', '--百位不是0则每段之间加连接符,

IF (@i=3 and (@billion>0 or @million>0 or @thousand>0) and (@hundreds=0 and (@tenth>0 or @one>0)))

SET @result=@result+' and '--百位是0则加连接符AND

IF @hundreds>0

SET @result=@result+RTRIM(SUBSTRING(@numbers,@hundreds*10-9,10))+' hundred'

IF @tenth>=2 and @tenth<=9

BEGIN

IF @hundreds>0

SET @result=@result+' and '

SET @result=@result+RTRIM(SUBSTRING(@numbers,@tenth*10+171,10))

END

IF @one>=1 and @one<=19

BEGIN

IF @tenth>0

SET @result=@result+'-'

ELSE

IF @hundreds>0

SET @result=@result+' and '

SET @result=@result+RTRIM(SUBSTRING(@numbers,@one*10-9,10))

END

IF @i=0 and @billion>0

SET @result=@result+' billion'

IF @i=1 and @million>0

SET @result=@result+' million'

IF @i=2 and @thousand>0

SET @result=@result+' thousand'

SET @i=@i+1

END

IF SUBSTRING(@s,14,2)'00'

BEGIN

SET @result=@result+' AND '

IF SUBSTRING(@s,14,1)='0'

SET @result=@result+'zero'

ELSE

SET @result=@result+RTRIM(SUBSTRING(@numbers,CAST(SUBSTRING(@s,14,1) AS int)*10-9,10))

IF SUBSTRING(@s,15,1)'0'

SET @result=@result+' '+RTRIM(SUBSTRING(@numbers,CAST(SUBSTRING(@s,15,1) AS int)*10-9,10))

END

RETURN(@result)

END

复制代码代码如下:

CREATE FUNCTION f_amt_to_chn (@num numeric(14,2))

RETURNS varchar(100) WITH ENCRYPTION

AS

BEGIN

DECLARE @n_data VARCHAR(20),@c_data VARCHAR(100),@n_str VARCHAR(10),@i int

SET @n_data=RIGHT(SPACE(14)+CAST(CAST(ABS(@num*100) AS bigint) AS varchar(20)),14)

SET @c_data=''

SET @i=1

WHILE @i<=14

BEGIN

SET @n_str=SUBSTRING(@n_data,@i,1)

IF @n_str' '

BEGIN

IF not ((SUBSTRING(@n_data,@i,2)='00') or ((@n_str='0') and ((@i=4) or (@i=8) or (@i=12) or (@i=14))))

SET @c_data=@c_data+SUBSTRING('零壹贰叁肆伍陆柒捌玖',CAST(@n_str AS int)+1,1)

IF not ((@n_str='0') and (@i4) and (@i8) and (@i12))

SET @c_data=@c_data+SUBSTRING('仟佰拾亿仟佰拾万仟佰拾元角分',@i,1)

IF SUBSTRING(@c_data,LEN(@c_data)-1,2)='亿万'

SET @c_data=SUBSTRING(@c_data,1,LEN(@c_data)-1)

END

SET @i=@i+1

END

IF @num<0

SET @c_data='负'+@c_data

IF @num=0

SET @c_data='零元'

IF @n_str='0'

SET @c_data=@c_data+'整'

RETURN(@c_data)

END

//测试函数

select name, gz,dbo.f_amt_to_chn(gz) as 中文金额,dbo.f_amt_to_eng(gz) as 英文金额 from tb_hr_gz

//删除函数

语法:

drop function <函数名称>

代码:

drop function f_num_to_eng

-----------------------------------------------------------

6.6触发器Trigger

22. 1. Trigger( 14 ) 22. 10. Trigger order( 2 )

22. 2. Alter Trigger( 4 ) 22. 11. Drop trigger( 2 )

22. 3. Trigger for after( 4 ) 22. 12. COLUMNS_UPDATED( 1 )

22. 4. Trigger for Delete( 4 ) 22. 13. Update function( 3 )

22. 5. Trigger for insert( 1 ) 22. 14. Deleted table( 2 )

22. 6. Trigger for update( 4 ) 22. 15. Inserted table( 5 )

22. 7. Trigger on database( 2 ) 22. 16. RECURSIVE_TRIGGERS( 1 )

22. 8. Trigger on server( 1 ) 22. 17. Utility trigger( 4 )

22. 9. Trigger on view( 3 )

//触发器建立

语法:

create trigger <触发器名称>on <表名>

[for insert update delete]

as

[定义变量]

begin

{代码块...}

end

代码0:

复制代码代码如下:

create trigger tg_tb_hr_bm on tb_hr_bm

for insert,update,delete

as

declare @bm_d varchar(20)

declare @bm_i varchar(20)

begin

set @bm_d=(select bm from deleted)

set @bm_i=(select bm from inserted)

if exists(select * from tb_hr_gz ,deleted where(tb_hr_gz.bm =deleted.bm ))

begin

update tb_hr_gz set bm='' where bm =@bm_d

end

if update(bm)

begin

update tb_hr_gz set bm=@bm_i where bm =@bm_i

end

end

//删除触发器

语法:

drop trigger <触发器名称>

代码:

drop trigger tg_w_house_center

-----------------------------------------------------------

6.7事务Transaction

事务(COMMIT/ROLLBACK)

SET TRANSACTION --定义当前事务数据访问特征

COMMIT --提交当前事务

ROLLBACK --取消当前事务

篇5:如何转移SQL SERVER数据库数据库教程

server|数据|数据库

我用的是SQL server 6.5,(刚刚用,新手啦),原来放数据库的服务器要更换,请问如何转移?手边的这本书和我的操作界面不一样,很让我生气!我基本思路是这样的:先备份数据库----有了*.dat文件---在另一台机器上设置设备、库、表(将*.sql文件用isql生成表结构)---用restore恢复(应该是恢复表的内容),

如何转移SQL SERVER数据库数据库教程

可做到最后一步,restore按钮总也不亮,不知我的思路可有错误,现在问题应该怎么解决,请大侠们出手相助!!!

azury (来自 202.111.130.166) 于 99-5-19 上午 11:58:10 加贴在 SQL数据库:

1 . 原有数据库服务器不要动。

2 . 重新安装一个Sql Server 服务器。

3 . 安装完毕在 Enterprise manager 中将两个服务器都映象进来

(其实,就是Register两个)

3 . 选择要转移的数据库

4 . 菜单中选Tools -->Database Backup/Restore

5 . 设置源/目的以及其他参数

6 . 进行转移(非常快)

试试吧,

:)

露茜 (来自 202.111.130.166) 于 99-5-19 上午 11:56:52 加贴在 SQL数据库:

然后再把原来的目录全部拷过来,覆盖现有的文件就可以了

不过我也是听说的,没有试过,azury姐姐可能会有比较好的办法,但是她的方法可能会使数据出现一些错误

小懒 (来自 202.111.130.166) 于 99-5-19 下午 12:00:54 加贴在 SQL数据库:

在enterprise manager中的菜单--TOOL--DATABASE/OBJECT TRANSFER

选择原来的sql server服务器和库是source

destination就是你现在的server和database

visitor (来自 210.72.252.34) 于 99-5-19 下午 04:16:49 加贴在 SQL数据库:

MS在6.5升级到7.0时问题多多.

给他们的工程师打过电话,

至今也没能提供一个简便/可靠的方案.

若非不得以,

还是在7.0上从头开始吧!

篇6:PL/SQL Developer数据库教程

PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等,

PL/SQL Developer数据库教程

。PL/SQL Developer功能十分全面,大大缩短了程序员的开发周期。强大的PL/SQL编辑器,完善的Debugger调试器(需要Oracle 7.3.4或以上版本)询问创建SQL视窗命令视窗报告视窗项目浏览器过程优化HTML手册Non-PL/SQL目标模板目录比较用户目标输出用户目标工具lug-In扩展Multi-threaded IDE简单的安装(本软件由allroundautomations中国区总代理www.softwarecn.com 授权发布),

这是一个第三方的开发软件,非常好用,对于刚入门的oracle初学者来说,是个不错的选择,前一段时间做oracle数据转换,一直用的是这个东东,鼎立推荐!

下载地址:www.newhua.com/soft/4902.htm

篇7:windows xp下如何安装SQL server企业版

SQL2000企业版本适用于WIN 2000 Server系统和Windows 系统,Windows XP一般装不了需要选用个人版或开发板,但是企业版也可以安装在xp系统下。这里介绍一个XP下安装装SQL2000企业版本方法,以供参考:

一.在SQL服务器的安装盘中找到MSDE这个目录,并且点击setup.exe安装它,过程简单直接下一步

就OK了。

二. 重启系统WINDOWSXP,这下就可以看到SQL服务的图标出现了。

三. 再拿出SQL服务器版的安装光盘,(本地磁盘安装运行autorun.exe就行了)根据提示安装,这里直接安装客户端工具。

四. 打开企业管理器,试用sa用户连一下,是不是用户登陆失败?因为你还没有与信任SQL SERVER连接相关联。还好这个只要对系统注册表稍加修改就可以啦:在运行中输入regedit打开注册表编辑器,找到

[HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER]

这个项里面有一个键值LoginMode,默认下,值是1,现在将值改为2,重启电脑,

五. 再打开企业管理,再连接试试,OK了!   安装完毕以后,企业管理器默认是SQL Server和Windows混合模式登陆,打开企业管理器后,右击“SQL Server组”下的“(local)Windows NT”,选择“属性”然后可以修改登陆模式,将“(local)Windows NT”展开->安全性->登陆,双击右边的“SA”可以修改密码(如果安装的时候没有自己设密码的话)。自己输入密码->确定->提示再次确认密码。

打开查询分析器,弹出连接对话框,在上面的“SQL Server”选择“(local)”(本地)就行。接下来有两种方式连接,windows和SQL Server方式,第二种方式输入SA和自设的密码一般OK,若出现问题,解决方法一般是检查登录模式和密码正确输入。   以上是我在安装和设置过程中的总结。参考了网上查找的类似资料。

篇8:Windows Vista下安装SQL Server 安装配置

SQL Server 2005 SP2 出来后,Vista 下安装 SQL Server 2005 就很容易了,忽略掉所有提示,一直安装,安装完成了,直接打SP2的补丁就可以了,

这样简单的过程,是没必要写博客的。但我(郭红俊)仍然要写一篇博客,是因为我忘记了一点,费了一上午才在Vista上安装好 SQL 2005。

这点就是:

Vista 上不支持安装 Enterprise 版的 SQL 2005 数据库服务

但是却支持安装 SQLEXPRESS 版本, 以及 Developer 版本的数据库服务。

至于SQL Server 2005 的其他几个版本,是否 Vista 支持安装数据库服务,由于我没测试,就不提了。

如果你想在Vista 上装 Enterprise 版的 SQL 2005 数据库服务,在安装选项的时候,就会看到下面的情况,数据库服务没法选择中,是灰色的。

郭红俊整理出这篇博客,就是为了提醒大家,如果发现类似上面的问题,可能你这个版本的SQL 2005 不支持在Vista 上安装,在Vista 上安装 SQL 2005 ,我还是强烈建议你安装 开发人员版本的 SQL 2005。

相关下载:

英文版 Microsoft SQL Server 2005 Service Pack 2 下载地址:

www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=d07219b2-1e23-49c8-8f0c-63fa18f26d3a

中文版 Microsoft SQL Server 2005 Service Pack 2 下载地址:

www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=d07219b2-1e23-49c8-8f0c-63fa18f26d3a

SQL Server 2005 SP2 的新增功能

download.microsoft.com/download/e/2/b/e2baa171-0995-42f9-befc-526ae4683ea2/WhatsNewSQL2005SP2.htm

关 键 字:MYSQL

篇9:同时访问SQL SERVER和SYBASE数据库

对于一个系统管理员,要同时管理一个网络中的多个数据库服务器或者是互连网中分属不同网络的多个数据库服务器,首先要解决同时连通访问这些数据库服务器的问题,一般来说,各种数据库必须使用自己相应的客户端工具进行连接,而不能连接另外的数据库。微软公司的SQLSERVER6.0数据库是从SYBASE4.2数据库发展而来,其自身的客户端工具是不能连接SYBASE10或SYBASE11数据库的。另外SYBASE11客户端所带工具WISQLl32可以分段执行一个SQL文件中的任一选择部分,这样给管理数据库服务器,调试存储过程、触发器带来了很大的方便。这个功能在微软公司的SQLSERVER6.0数据库客户端所带工具ISQL_W所不具备的。

一.系统环境

为了简化起见,假设只在一个网络环境中,只有一台网络服务器,在这台网络服务器上同时安装了MSSQLSERVER6.0、SYBASE11(或者SYBASE10,建议不要同时安装SYBASE11和10两个版本)。不考虑单一网络多台服务器或互联网络多台网络服务器环境。但是无论什么环境,应用同样的方法都可以实现WISQLl32对分布在一台或多台网络服务器上数据库服务器的访问。

1.网络服务器:WINDOWSNT3.51或4.0网络操作系统,内存64MB以上,奔腾133以上,网络协议为TCP/IP,主域控制器名RMYH,网络服务器的计算机名DBSERVER。

2.在DBSERVER网络服务器上同时安装的MSSQLSERVER6.0数据库服务器名为DBSERVER(与网络服务器同名),SYBASE11数据库服务器包含SYBASE11(SQL服务器)、SYBASE11-BS(BACKUP服务器)、SYBASE11-MS(MONITOR服务器)、SYBASE11-HS(HISTORY服务器)四个数据库服务器(SYBASE10数据库服务器只包含SYABSE10,SYBASE10-BS、SYBASE10-MS三个数据库服务器)。

3.客户机:中文WINDOWS95,SYABSEFORWINDOWS95客户端工具

二.配置SYABSEFORWINDOWS95客户端工具

SQLEDIT是SYBASE与平台无关的程序,用来配置客户连接,SQLEDIT用于编辑SYBASE根目录下INI子目录中名为SQL.INI的文件,也可以人工地编辑SQL.INI文件,但是借助SQLEDIT的图形工具要容易一些,并且可以把错误推给SYBASE。SQLEDIT的使用方法请参考有关SYBASE的说明书。本文主要讨论在SQL.INI如何选择参数来使WISQL同时访问MSSQLSERVER和SYBASE11数据库服务器。

WINDOWSNT可以选择NetBEUI、IPX/SPX、TCP/IP三种网络协议来组建网络,SYBASE11(或者SYBASE10)数据库服务器安装时,会根据网络协议来生成NET-LIBRARY驱动程序,三种网络协议都能生成名为NLMSNMP(命名管道)的NET-LIBRARY驱动程序,其中对于TCP/IP网络协议,还多生成一个名为NLWNSCK(软插口)的NET-LIBRARY驱动程序,所以笔者选择使用TCP/IP构成的WINDOWSNT网络作为分析的环境。

使用SQLEDIT或编辑软件配置好的SQL.INI文件内容如下(SQL.INI文件在c:\sybase\ini目录中):

[MSSQL6.0]

$BASE$00=NLMSNMP,\\ dbserver \pipe\sql\ query

$BASE$01=NLWNSCK,dbserver,1433

query=$BASE$00;$BASE$01;

$BASE$02=NLMSNMP,\\dbserver\pipe\sql\query

$BASE$03=NLWNSCK,dbserver,1433

master=$BASE$02;$BASE$03;

[SYBASE11]

$BASE$00=NLWNSCK,dbserver,5000

$BASE$01=NLMSNMP,\\dbserver\pipe\sybase\query

master=$BASE$00;$BASE$01;

$BASE$02=NLWNSCK,dbserver,5000

$BASE$03=NLMSNMP,\\dbserver\pipe\sybase\query

query=$BASE$02;$BASE$03;

[SYBASE11_BS]

$BASE$00=NLWNSCK,dbserver,5001

$BASE$01=NLMSNMP,\\dbserver\pipe\sybase\ backup

query=$BASE$00;$BASE$01;

$BASE$02=NLWNSCK,dbserver,5001

$BASE$03=NLMSNMP,\\dbserver\pipe\sybase\backup

master=$BASE$02;$BASE$03;

[SYBASE11_MS]

$BASE$00=NLWNSCK,dbserver,5002

$BASE$01=NLMSNMP,\\dbserver\pipe\sybase\monitor

master=$BASE$00;$BASE$01;

$BASE$02=NLWNSCK,dbserver,5002

$BASE$03=NLMSNMP,\\dbserver\pipe\sybase\monitor

query=$BASE$02;$BASE$03;

[SYBASE11_HS]

$BASE$00=NLWNSCK,dbserver,5003

$BASE$01=NLMSNMP,\\dbserver\pipe\sybase\hist

master=$BASE$00;$BASE$01;

$BASE$02=NLWNSCK,dbserver,5003

$BASE$03=NLMSNMP,\\dbserver\pipe\sybase\ hist

query=$BASE$02;$BASE$03;

[SYBASE10]

$BASE$00=NLMSNMP,\\dbserver\pipe\sql10\query

$BASE$01=NLWNSCK,dbserver,5000

master=$BASE$00;$BASE$01

$BASE$02=NLMSNMP,\\dbserver\pipe\sql10\query

$BASE$03=NLWNSCK,dbserver,5000

query=$BASE$02;$BASE$03

[SYBASE10_BS]

$BASE$00=NLMSNMP,\\dbserver\pipe\sql10\backup

$BASE$01=NLWNSCK, dbserver,5001

query=$BASE$00;$BASE$01;

$BASE$02=NLMSNMP,\\dbserver\pipe\sql10\backup

$BASE$03=NLWNSCK,dbserver,5001

master=$BASE$02;$BASE$03;

[SYBASE10_MS]

$BASE$00=NLMSNMP,\\dbserver\pipe\sql10\ monitor

$BASE$01=NLWNSCK,dbserver,5002

master=$BASE$00;$BASE$01;

$BASE$02= NLMSNMP,\\dbserver\pipe\sql10\monitor

$BASE$03= NLWNSCK,dbserver,5002

query=$BASE$02;$BASE$03;

从以上sql.ini文件内容可以看出:

①使用TCP/IP软插口的格式为

NLWNSCK,网络服务器名称,软插口地址

②使用命名管道的格式为

NLMSNMP,\\网络服务器名称\pipe\数据库类型\数据库服务器简称

注意:网络服务器名称是指网络服务器本身的计算机名称,

如果在互联网络具有多台网络服务器环境中,网络服务器名称应该包含域名,这样就可以访问不同网络中的数据库服务器。在单一网络中可以省略域名,如果单一网络中各个数据库服务器安装在不同的机器上,应注意将网络服务器名称改成相应的计算机名称。

③软插口地址、数据库类型、数据库服务器简称等参数的变化见下表1

数据库服务器名称 简称数据库 类型 软插口地址

MSSQL6.0 SQL Query Sql 1433

SYBASE11 SQL Query Sybase 5000

SYBASE11_ BS Backup Sybase 5001

SYBASE11_MS Monitor Sybase 5002

SYBASE11_HS Hist Sybase 5003

SYBASE10 SQL Query Sql10 5000

SYBASE10 BS Backup Sql10 5001

SYBASE10_MS Monitor Sql10 5002

表1.SQL.INI文件中参数变化表

三.连通测试及分析

连通测试使用SYBPING,连通成功会出现提示:

①使用命名管道:

connection to server联接通道 was sucessful

loaded netlibrary driver‘NLMSNMP Named pipes driver驱动程序名

②使用软插口:

connection to server联接通道 was sucessful

loaded netlibrary driver‘NLWNSCK.DLL driver驱动程序名

连通不成功时出现提示:

①使用命名管道:

connection to server联接通道 was failed

loaded netlibrary driver‘NLMSNMP Named pipes driver驱动程序名

②使用软插口

connection to server联接通道 was failed

loaded netlibrary driver‘NLWNSCK.DLL driver驱动程序名

使用SYPING,选择相应的数据库服务器,提示中可能出现的参数见表2:

数据库服务器名称  联接通道驱动程序

MSSQL6.0 SQL \pipe\sql\query NLMSNMP.DLL

Dbserver,1433 NLWNSCK.DLL

SYBASE11 SQL \pipe\sybase\ query NLMSNMP.DLL

Dbserver,5000 NLWNSCK.DLL

SYBASE11_ BS \pipe\sybase\ backup NLMSNMP.DLL

Dbserver,5001 NLWNSCK.DLL

SYBASE11_MS \pipe\sybase\ monitor NLMSNMP.DLL

Dbserver,5002 NLWNSCK.DLL

SYBASE11_HS \pipe\sybase\ hist NLMSNMP.DLL

Dbserver,5003 NLWNSCK.DLL

SYBASE10 SQL \pipe\sql10\query NLMSNMP.DLL

Dbserver,5000 NLWNSCK.DLL

SYBASE10 BS \pipe\sql10\ backup NLMSNMP.DLL

Dbserver,5001 NLWNSCK.DLL

SYBASE10_MS \pipe\sql10\ monitor NLMSNMP.DLL

Dbserver,5002 NLWNSCK.DLL

表2.提示中可能出现的联接通道和驱动程序一览表

注意:驱动程序名应该是包含有路径的全名。表格2中省略了路径“c:\sybase\dll”。

【windows下同时安装sql和sql的方法数据库教程】相关文章:

1.同一服务器上安装SQL和SQL冲突解决方案数据库教程

2.几十个的PL/SQL数据库教程

3.MS Sql Server 日志清理数据库教程

4.从动态SQL中返回值数据库教程

5.实战SQL语句收集(不断更新中)数据库教程

6.写出优美SQL语句的捷径数据库教程

7.SQL Server数据库性能优化

8.SQL数据库工作的简历

9.SQL Server数据库性能优化技巧

10.在PL/SQL 开发中调试存储过程和函数的一般性方法数据库教程

下载word文档
《windows下同时安装sql和sql的方法数据库教程.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度: 评级1星 评级2星 评级3星 评级4星 评级5星
点击下载文档

文档为doc格式

最新推荐
猜你喜欢
  • 返回顶部