引用完整性
下表提供了
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
约束 Oracle Microsoft SQL Server
PRIMARY KEY [CONSTRAINT constra
![](/icons/21897int.gif)
PRIMARY KEY (col_name [, col_name2 [..., col_name16]])
[USING INDEX storage_parameters] [CONSTRAINT constra
![](/icons/21897int.gif)
PRIMARY KEY [CLUSTERED | NONCLUSTERED] (col_name [, col_name2 [..., col_name16]])
[ON segment_name]
[NOT FOR REPLICATION]
UNIQUE [CONSTRAINT constra
![](/icons/21897int.gif)
UNIQUE (col_name [, col_name2 [..., col_name16]])
[USING INDEX storage_parameters] [CONSTRAINT constra
![](/icons/21897int.gif)
UNIQUE [CLUSTERED | NONCLUSTERED](col_name [, col_name2 [..., col_name16]])
[ON segment_name]
[NOT FOR REPLICATION]
FOREIGN KEY [CONSTRAINT constra
![](/icons/21897int.gif)
[FOREIGN KEY (col_name [, col_name2 [..., col_name16]])]
REFERENCES [owner.]ref_table [(ref_col [, ref_col2 [..., ref_col16]])]
[ON DELETE CASCADE] [CONSTRAINT constra
![](/icons/21897int.gif)
[FOREIGN KEY (col_name [, col_name2 [..., col_name16]])]
REFERENCES [owner.]ref_table [(ref_col [, ref_col2 [..., ref_col16]])]
[NOT FOR REPLICATION]
DEFAULT Column property, not a constra
![](/icons/21897int.gif)
DEFAULT (constant_expression) [CONSTRAINT constra
![](/icons/21897int.gif)
DEFAULT {constant_expression | niladic-function | NULL}
[FOR col_name]
[NOT FOR REPLICATION]
CHECK [CONSTRAINT constra
![](/icons/21897int.gif)
CHECK (expression) [CONSTRAINT constra
![](/icons/21897int.gif)
CHECK [NOT FOR REPLICATION] (expression)
NOT FOR REPLICATION子句用来在复制过程中挂起列级别
![](/icons/21897dou.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
外部键
定义外部关键字
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
REFERENCES子句相匹配
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
及
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
Microsoft SQL Server约束提供了在同
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
以使用基于表
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
Oracle和SQL Server都支持自引用表
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
prereq列可以引用CLASS表中
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
在Oracle中实现层叠式
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
功能
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
用户定义
![](/icons/21897de.gif)
用户定义
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
存储过程
Microsoft SQL Server存储
![](/icons/21897chengxu.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897chengxu.gif)
以外
![](/icons/21897dou.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
Oracle Microsoft SQL
CREATE OR REPLACE PROCEDURE [user.]procedure
[(argument [IN | OUT] datatype
[, argument [IN | OUT] datatype]
{IS | AS} block CREATE PROC[EDURE] procedure_name [;number]
[
{@parameter data_type} [VARYING] [= default] [OUTPUT]
]
[,…n]
[WITH
{ RECOMPILE | ENCRYPTION |
RECOMPILE, ENCRYPTION} ]
[FOR REPLICATION]
AS
sql_statement […n]
在SQL Server中
![](/icons/21897dou.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
个数字标记(#procedure_name)表示是
![](/icons/21897yi.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897dou.gif)
是
![](/icons/21897yi.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897chengxu.gif)
用户会话结束时自动删除
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
以访问它
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
SQL Server存储
![](/icons/21897chengxu.gif)
![](/icons/21897dou2.gif)
![](/icons/21897diaoyong.gif)
![](/icons/21897de.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897dou.gif)
![](/icons/21897diaoyong.gif)
![](/icons/21897de.gif)
![](/icons/21897chengxu.gif)
运行时减少
![](/icons/21897dou2.gif)
下面
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897hanshu.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
版本更简单
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
![](/icons/21897yinwei.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
使用游标
![](/icons/21897dou2.gif)
Oracle Microsoft SQL
CREATE OR REPLACE PACKAGE STUDENT_ADMIN.P1 AS ROWCOUNT NUMBER :=0;
CURSOR C1 RETURN STUDENT%ROWTYPE;
FUNCTION SHOW_RELUCTANT_STUDENTS
(WORKVAR OUT VARCHAR2) RETURN NUMBER;
END P1;
/
CREATE OR REPLACE PACKAGE BODY STUDENT_ADMIN.P1 AS CURSOR C1 RETURN STUDENT%ROWTYPE
IS
SELECT * FROM STUDENT_ADMIN.STUDENT
WHERE NOT EXISTS
(SELECT \'X\' FROM STUDENT_ADMIN.GRADE
WHERE GRADE.SSN=STUDENT.SSN) ORDER BY SSN;
FUNCTION SHOW_RELUCTANT_STUDENTS
(WORKVAR OUT VARCHAR2) RETURN NUMBER IS
WORKREC STUDENT%ROWTYPE;
BEGIN
IF NOT C1%ISOPEN THEN OPEN C1;
ROWCOUNT :=0;
ENDIF;
FETCH C1 INTO WORKREC;
IF (C1%NOTFOUND) THEN
CLOSE C1;
ROWCOUNT :=0;
ELSE
WORKVAR := WORKREC.FNAME||\' \'||WORKREC.LNAME||
\', social security number \'||WORKREC.SSN||\' is not enrolled
in any
![](/icons/21897class.gif)
ROWCOUNT := ROWCOUNT + 1;
ENDIF;
RETURN(ROWCOUNT); CREATE PROCEDURE
STUDENT_ADMIN.SHOW_
RELUCTANT_STUDENTS
AS SELECT FNAME+\' +LNAME+\', social security number\'+ SSN+\' is not enrolled in any
![](/icons/21897class.gif)
FROM STUDENT_ADMIN.STUDENT S
WHERE NOT EXISTS
(SELECT \'X\' FROM STUDENT_ADMIN.GRADE G
WHERE G.SSN=S.SSN)
ORDER BY SSN
RETURN@@ROWCOUNT
GO
EXCEPTION
WHEN OTHERS THEN
IF C1%ISOPEN THEN CLOSE C1;
ROWCOUNT :=0;
ENDIF;
RAISE_APPLICATION_ERROR(-20001,SQLERRM);
END SHOW_RELUCTANT_STUDENTS;
END P1;
/
SQL Server不支持和Oracle包或者
![](/icons/21897hanshu.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
延迟存储过程
![](/icons/21897de.gif)
Microsoft SQL Server提供了WAITFOR
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
存储
![](/icons/21897chengxu.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
WAITFOR {DELAY \'time\' | TIME \'time\'}
指示Microsoft SQL Server等待直到给定
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
在这里
DELAY
指示Microsoft SQL Server等待
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
\'time\'
需要等待
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
但是
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
TIME
指示SQL Server等到指定
![](/icons/21897de.gif)
例如:
BEGIN
WAITFOR TIME \'22:20\'
EXECUTE update_all_stats
END
指定存储
![](/icons/21897chengxu.gif)
![](/icons/21897de.gif)
要在
![](/icons/21897yi.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
Oracle Microsoft SQL
Varname datatype
DEFAULT
[= default] [OUTPUT]
触发器(Triggers)
Oracle和Microsoft SQL Server都有触发器
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
描述 Oracle Microsoft SQL Server
每表可以有
![](/icons/21897de.gif)
在INSERT, UPDATE, DELETE的前执行触发器 是 否
在INSERT, UPDATE, DELETE的后执行触发器 是 是
语句级触发器 有 有
行级触发器 有 无
在执行的前检查约束 是
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
在
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
在INSERT触发器中提交新值 :
![](/icons/21897new.gif)
取消触发器 ALTER TRIGGER DTS中
![](/icons/21897de.gif)
DELETED和INSERTED是SQL Server为触发器创建
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
并且保存了可能被用户
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
这些表提供了和Oracle中
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
Server中执行
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
INSERTED和DELETED表同触发器表是
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
个触发器
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
GRADE INSERTED DELETED
SSN CHAR(9)
CCODE VARCHAR(4)
GRADE VARCHAR(2) SSN CHAR(9)
CCODE VARCHAR(4)
GRADE VARCHAR(2) SSN CHAR(9)
CCODE VARCHAR(4)
GRADE VARCHAR(2)
INSERTED和DELETED表可以被触发器检查以确定要执行什么样
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
语句
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
UPDATE语句使用INSERTED和DELETED表
![](/icons/21897dou.gif)
![](/icons/21897yinwei.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
新
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
下面
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
询任意表中
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
Oracle Microsoft SQL Server
CREATE TRIGGER STUDENT_ADMIN.TRACK_GRADES
AFTER
INSERT OR UPDATE OR DELETE
ON STUDENT_ADMIN.GRADE
FOR EACH ROW
BEGIN
INSERT INTO GRADE_HISTORY(
TABLE_USER, ACTION_DATE,
OLD_SSN, OLD_CCODE,
OLD_GRADE, NEW_SSN,
NEW_CCODE, NEW_GRADE)
VALUES (USER, SYSDATE,
:OLD.SSN, :OLD.CCODE,
:OLD.GRADE, :NEW.SSN,
:NEW.CCODE, :NEW.GRADE),
END;
CREATE TRIGGER STUDENT_ADMIN.TRACK_GRADES
ON STUDENT_ADMIN.GRADE
FOR INSERT, UPDATE, DELETE
AS
INSERT INTO GRADE_HISTORY(
TABLE_USER, ACTION_DATE,
OLD_SSN, OLD_CCODE, OLD_GRADE
NEW_SSN, NEW_CCODE, NEW_GRADE)
SELECT USER, GETDATE
![](/icons/21897kh.gif)
OLD.SSN, OLD.CCODE, OLD.GRADE,
NEW.SSN, NEW.CCODE, NEW.GRADE
FROM INSERTED NEW FULL OUTER JOIN
DELETED OLD _disibledevent=>
你可以只在当前数据库中创建
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
修饰触发器
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
触发器可以最多嵌套32级
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
动
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897diaoyong.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou.gif)
器被取消
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
行
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
Microsoft SQL Server
![](/icons/21897de.gif)
![](/icons/21897int.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
下面
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
CREATE 语句(DATABASE, TABLE, INDEX, PROCEDURE, DEFAULT, RULE, TRIGGER, SCHEMA, 和VIEW)
DROP 语句(TRIGGER, INDEX, TABLE, PROCEDURE, DATABASE, VIEW, DEFAULT, RULE)
ALTER 语句(DATABASE, TABLE, VIEW, PROCEDURE, TRIGGER)
TRUNCATE TABLE
GRANT, REVOKE, DENY
UPDATE STATISTICS
RECONFIGURE
UPDATE STATISTICS
RESTORE DATABASE, RESTORE LOG
LOAD LOG, DATABASE
DISK语句
SELECT INTO (
![](/icons/21897yinwei.gif)
![](/icons/21897yi.gif)
如果需要了解有关触发器
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
事务、锁定和并行
本部分解释了在Oracle和Microsoft SQL Server事务是如何执行
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
和并行问题的间
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
事务
在Oracle中
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897yi.gif)
数据库
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
缺省情况下
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yinwei.gif)
据是自动保存
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
隐式
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
/
UPDATE STUDENT_ADMIN.STUDENT
SET MAJOR = \'LIT\'
WHERE MAJOR = \'ENG\'
/
DELETE FROM DEPT_ADMIN.DEPT
WHERE DEPT = \'ENG\'
/
COMMIT
/ BEGIN TRANSACTION
INSERT INTO DEPT_ADMIN.DEPT (DEPT, DNAME)
VALUES (\'LIT\', \'Literature\')
UPDATE DEPT_ADMIN.CLASS
SET DEPT = \'LIT\'
WHERE DEPT = \'ENG\'
UPDATE STUDENT_ADMIN.STUDENT
SET MAJOR = \'LIT\'
WHERE MAJOR = \'ENG\'
DELETE FROM DEPT_ADMIN.DEPT
WHERE DEPT = \'ENG\'
COMMIT TRANSACTION
GO
所有显明
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
同Oracle中
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
了
![](/icons/21897dou2.gif)
事务可以嵌套
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
套
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897hanshu.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897chengxu.gif)
互相
![](/icons/21897diaoyong.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
在存储过程和触发器中
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
不匹配
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897cuowu.gif)
息
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897diaoyong.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
只要情况许可
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
定义
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
组合到
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
在使用ODBC编程
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897hanshu.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
选择哪种模式要视AUTOCOMMIT连接选项
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
如果AUTOCOMMIT是OFF
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
如果你通过SQL Server Query Analyzer或者其他查询工具使用脚本
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
BEGIN TRANSACTION语句
![](/icons/21897dou.gif)
有可能会读到未提交
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
消失
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
别中限制性最小
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
前提下才能使用这种选择
![](/icons/21897dou2.gif)
SQL Server有两种思路方法实现Oracle中
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
表级别
![](/icons/21897de.gif)
Microsoft SQL Server可以用SELECT…table_name (TABLOCK)语句来锁定整个表
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
TABLE…IN SHARE MODE语句是
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
锁定将维持到语句
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
表
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
可以用SELECT…table_name (TABLOCKX)语句在
![](/icons/21897yi.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
上
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
TABLE…IN EXCLUSIVE MODE语句
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
SQL Server没有为显式
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou2.gif)
锁定升级
当
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
大部分行时
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou2.gif)
锁定增加使那些产生较大结果集
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897yinwei.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
在读取操作中
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
列情况下应用共享
![](/icons/21897de.gif)
![](/icons/21897de.gif)
使用了HOLDLOCK或者SET TRANSACTION ISOLATION LEVEL SERIALIZABLE语句
![](/icons/21897dou2.gif)
优化器选择了
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
表中积累
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
表中缺省
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
欲了解有关锁定升级极限
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
在
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
在下列情况下使用:
更新或者删除操作无索引可用
![](/icons/21897dou2.gif)
表中有独占锁定
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
创建了
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
Oracle不能升级行级别
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
100
![](/icons/21897dou.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
SELECT * FROM STUDENT FOR UPDATE
这个语句强制Oracle RDBMS依次锁定STUDENT表
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
个表
![](/icons/21897dou2.gif)
在SQL Server同样
![](/icons/21897de.gif)
SELECT * FROM STUDENT (UPDLOCK)
当这个查询运行
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
死锁
当
![](/icons/21897yi.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
时候就会发生死锁
![](/icons/21897dou2.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
成了抱死
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
在每次数据修改的后
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
介绍说明发生了
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897dou2.gif)
死锁
![](/icons/21897yi.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
在你
![](/icons/21897de.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
在每个表上使用分簇
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
使事务简短
![](/icons/21897dou2.gif)
欲了解详细信息
![](/icons/21897dou.gif)
Microsoft SQL Server”
远程事务
在Oracle中执行远程事务
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
问
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
务器
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
录到上面
![](/icons/21897dou2.gif)
远程服务器是成对设置
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
字都必须用sp_addlinkedserver系统存储过程或者SQL Server Enterprise Manager加到伙伴服务器上
![](/icons/21897dou2.gif)
设置完远程服务器以后
![](/icons/21897dou.gif)
来为那些必须访问远程服务器
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
过程
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
然后用EXECUTE语句来在远程服务器上执行过程
![](/icons/21897dou2.gif)
存储过程
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
DECLARE @retvalue1
![](/icons/21897int.gif)
EXECUTE @retvalue = STUDSVR1.student_db.student_admin.validate_student \'111111111\'
欲了解详细信息
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
分布事务
如果修改两个或者更多
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897chushi.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
用包含在SQL Server中
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
中
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
缺省情况下
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
种来存储:
BEGIN DISTRIBUTED TRANSACTION语句
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897diaoyong.gif)
![](/icons/21897dou2.gif)
在下例中
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897class.gif)
BEGIN DISTRIBUTED TRANSACTION
UPDATE STUDENT_ADMIN.GRADE
SET GRADE = \'B+\' WHERE SSN = \'111111111\' AND CCODE = \'1234\'
DECLARE @retvalue1
![](/icons/21897int.gif)
EXECUTE @retvalue1 = CLASS_SVR1.dept_db.dept_admin.
![](/icons/21897class.gif)
COMMIT TRANSACTION
GO
如果
![](/icons/21897chengxu.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
![](/icons/21897chengxu.gif)
![](/icons/21897de.gif)
失败
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
失败或者后滚
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
两步提交处理
Oracle和MS DTC两步提交机制在操作上是相似
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
和
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
个异常中断决定
![](/icons/21897dou2.gif)
如果所有
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
源管理器准备好后
![](/icons/21897dou.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
它
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
候
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
SQL语言支持
本部分简要介绍了Transact-SQL和PL/SQL语言语法上
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
SELECT和数据操作声明
当你把Oracle DML语句和PL/SQL
![](/icons/21897chengxu.gif)
![](/icons/21897dou.gif)
检查所有SELECT、INSERT、UPDATE、和DELETE语句是否有效
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
把所有
![](/icons/21897de.gif)
用适当
![](/icons/21897de.gif)
![](/icons/21897hanshu.gif)
![](/icons/21897hanshu.gif)
检查所有
![](/icons/21897de.gif)
用“+”代替“||”做
![](/icons/21897zifu.gif)
![](/icons/21897dou2.gif)
用Transact-SQL
![](/icons/21897chengxu.gif)
![](/icons/21897chengxu.gif)
把所有
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
用Transact-SQL过程代替PL/SQL过程、
![](/icons/21897hanshu.gif)
![](/icons/21897dou2.gif)
把PL/SQL触发器转换为Transact-SQL触发器
![](/icons/21897dou2.gif)
使用SET SHOWPLAN语句来调试你
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
SELECT statements语句
Oracle和Microsoft SQL Server用
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
Oracle Microsoft SQL
SELECT [/*+ optimizer_h
![](/icons/21897int.gif)
[ALL | DISTINCT] select_list
[FROM
{table_name | view_name | select_statement}]
[WHERE clause]
[GROUP BY group_by_expression]
[HAVING search_condition]
[START WITH … CONNECT BY]
[{UNION | UNION ALL | INTERSECT |
MINUS} SELECT …]
[ORDER BY clause]
[FOR UPDATE] SELECT select_list
[INTO
![](/icons/21897new.gif)
FROM table_source
[WHERE search_condition]
[ GROUP BY [ALL] group_by_expression [,…n]
[ WITH { CUBE | ROLLUP } ]
[HAVING search_condition]
[ORDER BY order_expression [ASC | DESC] ]
In addition:
UNION Operator
COMPUTE Clause
FOR BROWSE Clause
OPTION Clause
SQL Server不支持面向Oracle
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
于开销
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
SQL Server不支持Oracle
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
务
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
SQL Server不支持Oracle
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
任务
![](/icons/21897dou2.gif)
下面
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
代替INTERSECT操作符
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
Oracle Microsoft SQL
SELECT CCODE, CNAME
FROM DEPT_ADMIN.CLASS
INTERSECT
SELECT C.CCODE, C.CNAME
FROM STUDENT_ADMIN.GRADE G,
DEPT_ADMIN.CLASS C
WHERE C.CCODE = G.CCODE SELECT CCODE, CNAME
FROM DEPT_ADMIN.CLASS C
WHERE EXISTS
(SELECT \'X\' FROM STUDENT_ADMIN.GRADE G
WHERE C.CCODE = G.CCODE)
下例使用MINUS操作符来找出那些没有学生
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
Oracle Microsoft SQL
SELECT CCODE, CNAME
FROM DEPT_ADMIN.CLASS
MINUS
SELECT C.CCODE, C.CNAME
FROM STUDENT_ADMIN.GRADE G,
DEPT_ADMIN.CLASS C
WHERE C.CCODE = G.CCODE SELECT CCODE, CNAME
FROM DEPT_ADMIN.CLASSC
WHERE NOT EXISTS
(SELECT \'X\' FROM STUDENT_ADMIN.GRADE G
WHERE C.CCODE = G.CCODE)
INSERT语句
Oracle和Microsoft SQL Server用
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
Oracle Microsoft SQL
INSERT INTO
{table_name | view_name | select_statement} [(column_list)]
{values_list | select_statement} INSERT [INTO]
{
table_name [ [AS] table_alias] WITH ( […n])
| view_name [ [AS] table_alias]
| row
![](/icons/21897set.gif)
}
{ [(column_list)]
{ VALUES ( { DEFAULT
| NULL
| expression
}[,…n]
)
| derived_table
| execute_statement
}
}
| DEFAULT VALUES
Transact-SQL语言支持插入表和视图
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897chengxu.gif)
了
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
Oracle Microsoft SQL
INSERT INTO (SELECT SSN, CCODE, GRADE FROM GRADE)
VALUES (\'111111111\', \'1111\',NULL) INSERT INTO GRADE (SSN, CCODE, GRADE)
VALUES (\'111111111\', \'1111\',NULL)
Transact-SQL
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
行插入操作
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
如果该列不允许NULL
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
![](/icons/21897cuowu.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897yi.gif)
续值
![](/icons/21897dou2.gif)
关键字DEFAULT不能用于标识列
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
者values_clause
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou.gif)
column_list引用并且它有
![](/icons/21897yi.gif)
![](/icons/21897dou.gif)
![](/icons/21897dou2.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897de.gif)
![](/icons/21897yi.gif)
![](/icons/21897dou2.gif)
![](/icons/21897dou2.gif)
UPDATE语句
![](/icons/21897yinwei.gif)
![](/icons/21897de.gif)
![](/icons/21897dou.gif)
![](/icons/21897de.gif)
![](/icons/21897dou2.gif)
Oracle Microsoft SQL
最新评论