教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 互联网资料 >

Oracle和SQLServer的语法区别(7)

来源:网络收集 时间:2026-07-29
导读: ? 一个 SQL Server 登录帐户可在多个数据库中拥有名称相同的表。例如,ENDUSER1 帐户拥有下列数据库对象:USER_DB.ENDUSER1.STUDENT 和 OTHER_DB.ENDUSER1.STUDENT。限定符是数据库用户名,而不是 SQL Server 登录

? 一个 SQL Server 登录帐户可在多个数据库中拥有名称相同的表。例如,ENDUSER1 帐户拥有下列数据库对象:USER_DB.ENDUSER1.STUDENT 和 OTHER_DB.ENDUSER1.STUDENT。限定符是数据库用户名,而不是 SQL Server 登录名,因为它们并不一定相同。

同时,这些数据库中的其他用户可以拥有相同名称的对象:

? ? ? ?

USER_DB.DBO.STUDENT USER_DB.DEPT_ADMIN.STUDENT USER_DB.STUDENT_ADMIN.STUDENT OTHER_DB.DBO.STUDENT

因此,建议把所有者名称作为数据库对象引用的一部分。如果应用程序有多个数据库,建议把数据库名称也作为引用的一部分。如果查询跨多个服务器,也将服务器名称加到引用中。

?

每个 SQL Server 连接都有一个当前的数据库上下文,它是在登录时使用 USE 语句设定的。例如,假定下列场景:

一个用户,使用 ENDUSER1 帐户,登录到 USER_DB 数据库。用户请求 STUDENT 表。SQL Server 查找 ENDUSER1.STUDENT 表。如果找到该表,则 SQL Server 在

USER_DB.ENDUSER1.STUDENT 上执行请求的数据库操作。如果在 ENDUSER1 数据库帐户中没有找到该表,SQL Server 则在此数据库的 dbo 帐户中查找 USER_DB.DBO.STUDENT。如果该表仍没有找到,SQL Server 就会返回一个错误信息,指出该表不存在。 ? ?

如果另一个用户,例如 DEPT_ADMIN,拥有这个表,表名称前面一定加上数据库用户的名称( DEPT_ADMIN.STUDENT)。否则,数据库名称默认为当前在上下文中的数据库。 如果引用的表在另一个数据库中,该数据库名称必须用作引用的一部分。例如,在 OTHERDB 数据库中,要访问 ENDUSER1 拥有的 STUDENT 表时,就要使用 OTHER_DB.ENDUSER1.STUDENT。

可用两个英文句点将数据库和表的名称分隔开,省略对象的所有者名称。例如,如果应用程序引用 STUDENT_DB..STUDENT,SQL Server 进行如下查询:

1. STUDENT_DB.current_user.STUDENT 2. STUDENT_DB.DBO.STUDENT

如果用户一次只使用一个数据库,在对象的引用中省略数据库名称,这样,在其它数据库中使用该应用程序就变得简单了。所有对象引用隐式访问当前使用的数据库。如果在同一服务器上,要维护一个测试数据库和一个生产数据库,这是很有用的。

因为 Oracle 和 SQL Server 均支持标识 RDBMS 对象的 SQL-92 初级规则,所以,CREATE TABLE 语法是相似的。

Oracle CREATE TABLE [schema.]table_name Microsoft SQL Server CREATE TABLE [server.][database.][owner.] ( table_name {col_name column_properties ( [default_expression] {col_name [constraint [constraint column_properties[constraint [...constraint]]]| [[,] [constraint [...constraint]]]| constraint]} [[,] constraint]} [[,] {next_col_name | [[,] {next_col_name | next_constraint}...] next_constraint}...] ) ) [Oracle Specific Data Storage [ON filegroup_name] Parameters] Oracle 数据库对象名称不区分大小写。在 Microsoft SQL Server 中,取决所选的安装选项,数据库对象名可以是区分大小写的。

SQL Server 第一次安装时,默认的排序次序是字典顺序、不区分大小写。(可以使用 SQL Server 安装程序,设定不同的配置。)因为 Oracle 对象名称始终是唯一的,所以,把数据库对象迁移到 SQL Server,不应有任何问题。建议在 Oracle 和 SQL Server 中所有的表和列名都使用大写,以避免用户在区分大小写的 SQL Server 上安装时出现问题。

有了 Microsoft SQL Server,使用 RAID 通常可简化数据库对象的存放。与 Oracle 索引组织的表一样,SQL Server 聚集索引被集成到表的结构中。

Oracle Microsoft SQL Server CREATE TABLE DEPT_ADMIN.DEPT ( DEPT VARCHAR2(4) NOT NULL, DNAME VARCHAR2(30) NOT NULL, CONSTRAINT DEPT_DEPT_PK PRIMARY KEY (DEPT) USING INDEX TABLESPACE CREATE TABLE USER_DATA USER_DB.DEPT_ADMIN.DEPT ( PCTFREE 0 STORAGE (INITIAL 10K DEPT VARCHAR(4) NOT NULL, NEXT 10K DNAME VARCHAR(30) NOT NULL, MINEXTENTS 1 MAXEXTENTS CONSTRAINT DEPT_DEPT_PK UNLIMITED), PRIMARY KEY CLUSTERED (DEPT), CONSTRAINT DEPT_DNAME_UNIQUE CONSTRAINT DEPT_DNAME_UNIQUE UNIQUE (DNAME) UNIQUE NONCLUSTERED (DNAME) USING INDEX TABLESPACE ) USER_DATA PCTFREE 0 STORAGE (INITIAL 10K NEXT 10K MINEXTENTS 1 MAXEXTENTS UNLIMITED) ) PCTFREE 10 PCTUSED 40 TABLESPACE USER_DATA STORAGE (INITIAL 10K NEXT 10K MINEXTENTS 1 MAXEXTENTS UNLIMITED FREELISTS 1) 在 Oracle 中,可以使用任何有效的 SELECT 命令,来创建表。Microsoft SQL Server 可提供相同的功能,但语法不同。

Oracle Microsoft SQL Server CREATE TABLE STUDENTBACKUP AS SELECT * INTO STUDENTBACKUP SELECT * FROM STUDENT FROM STUDENT 除非要应用的数据库已将 select into/bulkcopy 数据库配置选项设为 ture,否则,SELECTUINTO 不会生效。(数据库所有者可以使用 SQL Server Enterprise Manager 或 Transact-SQL sp_dboption 系统存储过程设定该选项。)使用 sp_helpdb 系统存储过程检查数据库的状态。如果 select into/bulkcopy 没有设为 true,仍可使用 SELECT 语句,将数据复制到一个临时表中。

SELECT * INTO #student_backup FROM user_db.student_admin.student

当使用 SELECT..INTO 语句创建新表时,引用完整性定义并没有被转移到新表中。

必须把 select into/bulkcopy 选项设为 true,这一需求可能使迁移过程变得复杂。如果必须使用 SELECT 语句把数据复制到表中,先创建表,然后使用 INSERT INTOUSELECT 语句加载表。Oracle 和 SQL Server 的语法是一致的,并且不需要设定任何数据库选项。 在 Microsoft SQL Server 中,用于创建视图的语法与 Oracle 相似。

Oracle Microsoft SQL Server CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW [schema.]view_name CREATE VIEW [owner.]view_name [(column_name [, [(column_name [, column_name]...)] column_name]...)] [WITH ENCRYPTION] AS select_statement AS select_statement [WITH CHECK [WITH CHECK OPTION [CONSTRAINT OPTION] name]] [WITH READ ONLY] SQL Server 的视图要求该表存在,并且视图所有者有权访问 SELECT 语句中所指定的表(与 Oracle FORCE 选项类似)。

默认情况下,并不检查视图上的数据修改语句,来确定受影响的行是否在视图的作用域内。要检查所有的修改,则使用 WITH CHECK OPTION。WITH CHECK OPTION 的主要差异在于,Oracle 将其定义为一个约束,而 SQL Server 没有。其它方面,两者是相同的。

定义视图时,Oracle 提供了 WITH READ ONLY 选项。通过将 SELECT 权限仅授予视图用户,SQL Server 应用程序也可获得相同的结果。

SQL Server 和 Oracle 视图均支持使用数学表达式、函数和常量表达式创建派生列。一些 SQL Server 特定的差异有:

? ? ? ?

如果数据修改语句只影响一个基表,则可在多个视图上允许使用数据修改语句(INSERT 或 UPDATE)。在一个语句中,数据修改语句不能用于多于一个表。 视图中的 text 或 image 列不能使用 READTEXT 或 WRITETEXT。 不能使用 ORDER BY …… 此处隐藏:4641字,全部文档内容请下载后查看。喜欢就下载吧 ……

Oracle和SQLServer的语法区别(7).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/443128.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)