sqlserver有断言,sql 断言

sqlserver启动失败

sqlserver服务管理器里的sqlserver服务选项启动失败

成都创新互联-专业网站定制、快速模板网站建设、高性价比施甸网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式施甸网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖施甸地区。费用合理售后完善,十多年实体公司更值得信赖。

事件查看器错误描述如下:

按你说的,重新加载系统看看

SQLyogent.exe-应用程序错误

错误原因分析:关注信号发送从 SQLServer 客户端应用程序因查询超时可能导致 SQLServer 服务以意外退出

如果通过 SQLServer 客户端应用程序运行查询并且客户端应用程序关注信号发送到服务器是运行 SQLServer 因查询超时, SQLServer 服务可能会意外退出。

您可能会发现, 它类似于以下 SQLServer 错误日志中错误消息:

2003 09 10 - 13:43:02.38 spid9 spid 9 tabid 197575742 clean_process 中找到活动 sdes

还可能发现之一下列行为, 根据并行是启用还是的 SQLServer 实例上禁用。

1 行为

如果并行被启用的 SQLServer 实例上可能发生断言, 并且 SQLServer 服务可能意外退出。 您可能看到以下堆栈转储: Short Stack Dump

0x77f9741f Module(ntdll+1741f) (NtGetContextThread+b)

0x0078c44a Module(sqlservr+38c44a) (utassert_fail+1a0)

0x005bc329 Module(sqlservr+1bc329) (ExecutionContext::Cleanup+9e)

0x004cee07 Module(sqlservr+cee07) (ExecutionContext::Purge+46)

0x004ceb68 Module(sqlservr+ceb68) (stopsubprocess+e6)

0x004cd734 Module(sqlservr+cd734) (subproc_main+175)

0x41092cff Module(ums+2cff) (ProcessWorkRequests+102)

0x41093523 Module(ums+3523) (ThreadStartRoutine+139)

0x7800a27b Module(MSVCRT+a27b) (beginthread+ce)

0x77e8758a Module(KERNEL32+758a) (SetFilePointer+18a)

2003-09-10 13:28:04.99 kernel SQL Server Assertion: File: proc.c, line=1931

Failed Assertion = 'm_activeSdesList.Head () == NULL'.

2003-09-10 13:28:04.99 spid9 Using 'sqlimage.dll' version '4.0.5'

Dump thread - spid = 9, PSS = 0x413e70bc, EC = 0x4402c084

Stack Dump being sent to C:\MSSQL7\log\SQL00057.dmp

2 行为

如果 SQLServer, 的实例上禁用并行 SQLServer 服务可能继续要运行。 但是, 可能发现所类似如下 SQLServer 错误日志文件中的错误消息:

2003 09 10 - 13:43:02.38 spid9 spid 9 tabid 197575742 clean_process 中找到活动 sdes

2003 09 10 - 13:43:09.37 spid10 spid 10 tabid 197575742 clean_process 中找到活动 sdes

2003 09 10 - 13:43:09.37 spid9 spid 9 tabid 197575742 clean_process 中找到活动 sdes

2003 09 10 - 13:43:09.40 spid8 spid 8 tabid 197575742 clean_process 中找到活动 sdes

无法 Ctrl+C C - Ctrl+C Break 信号 2003 09 10 - 13:43:23.40 内核 SQLServer 关闭。

3 行为

如果 SQLServer 客户端应用程序运行存储过程通过包含问题查询禁用远程过程调用 (RPC) 和查询并行, SQLServer 服务可能会意外退出。 您可能看到所类似如下 SQLServer 错误日志文件中的错误消息:

2003 09 10 - 13:36:17.66 spid9 spid 9 tabid 197575742 clean_process 中找到活动 sdes

成为无主邮箱解除 2003 09 10 - spid9 9 进程锁定 13:36:17.66) 资源: Tab 8:197575742 ]:

使用'4.0.5''sqlimage.dll'版本 2003 09 10 - 13:36:17.66 spid9

2003 09 10 - 13:36:18.82 spid10 spid 10 tabid 197575742 clean_process 中找到活动 sdes

成为无主邮箱解除 2003 09 10 - spid10 10 进程锁定 13:36:18.82) 资源: Tab 8:197575742 ]:

2003 09 10 - 13:36:20.73 spid8 spid 8 tabid 197575742 clean_process 中找到活动 sdes

成为无主邮箱解除 2003 09 10 - spid8 8 进程锁定 13:36:20.73) 资源: Tab 8:197575742 ]:

转储线程 - spid = 9, PSS = 0x4139d0bc, EC = 0x4139d26c

堆栈转储发送到 C:\MSSQL7\log\SQL00060.dmp

也可能会看到, 它类似于以下堆栈转储: Short Stack Dump

0x77f9741f Module(ntdll+1741f) (NtGetContextThread+b)

0x005bcdd4 Module(sqlservr+1bcdd4) (ex_raise2+35c)

0x004f8616 Module(sqlservr+f8616) (ex_raise+5f)

0x006e1cf5 Module(sqlservr+2e1cf5) (reportUnlockFailure+8f)

0x005abaa3 Module(sqlservr+1abaa3) (lck_unlock+120)

0x0040c45a Module(sqlservr+c45a) (RowsetLockCache::ReleaseRowsetLock+72)

0x0040341a Module(sqlservr+341a) (closetable+134)

0x005b9bbd Module(sqlservr+1b9bbd) (clean_process+f5)

0x0042b5b6 Module(sqlservr+2b5b6) (execrpc+7b3)

0x4106256e Module(opends60+256e) (execute_rpc+421)

0x4106127c Module(opends60+127c) (execute_event+21a)

0x4106142f Module(opends60+142f) (process_commands+107)

0x41092cff Module(ums+2cff) (ProcessWorkRequests+102)

0x41093523 Module(ums+3523) (ThreadStartRoutine+139)

0x7800a27b Module(MSVCRT+a27b) (beginthread+ce)

0x77e8758a Module(KERNEL32+758a) (SetFilePointer+18a)

Dump thread - spid = 8, PSS = 0x413970bc, EC = 0x4139726c

Stack Dump being sent to C:\MSSQL7\log\SQL00061.dmp

(不看也罢)

解决方案

现在支持修补程序可从 Microsoft, 但它是仅用于纠正问题, 本文介绍。 它仅适用于系统是经历此特定问题。

要解决此问题, 请与 Microsoft 产品支持服务以获取此修复程序。 有关 Microsoft 产品支持服务电话号码和支持费用, 信息的完整列表请访问 Microsoft Web 站点:

()

注意 在特殊情况下, 如果 Microsoft 支持专家确定该特定更新将解决问题可能是免, 是正常收取支持电话费用。 通常支持成本将应用于其他支持问题和问题做不符合特定更新问题。

英文版的此修补程序具有文件属性如下表中列出 (或更高版本)。 协调通用时间 (UTC) 中列出的这些文件日期和时间。 当您查看文件信息, 将转换为本地时间。 要查找 UTC 与本地时间, 区别控制面板中日期和时间工具中使用 时区 选项卡。 Date Time Version Size File name

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

04-Oct-2002 23:59 7.00.1081 28,944 Dbmssocn.dll

06-Sep-2002 23:55 7.00.1077 53,520 Distrib.exe

06-Sep-2002 23:55 7.00.1077 98,576 Logread.exe

05-May-2003 18:34 54,904 Opends60.dbg

05-May-2003 18:34 7.00.1093 155,920 Opends60.dll

06-Sep-2002 23:56 7.00.1077 250,128 Rdistcom.dll

06-Sep-2002 23:55 7.00.1077 82,192 Replmerg.exe

06-Sep-2002 23:56 7.00.1077 78,096 Replres.dll

17-Sep-2002 22:52 7,941 Securityhotfix.sql

06-Sep-2002 23:56 7.00.1077 160,016 Snapshot.exe

30-May-2003 04:21 59,214 Sp4_serv_uni.sql

15-Jan-2003 01:33 7.00.1085 344,064 Sqlagent.exe

06-Sep-2002 23:55 7.00.1077 45,056 Sqlcmdss.dll

16-May-2003 00:18 7.00.1094 2,629,632 Sqldmo.dll

16-May-2003 13:29 7.00.1094 81,920 Sqlmap70.dll

03-Oct-2003 01:30 7.00.1143 5,062,928 Sqlservr.exe

04-Oct-2002 23:59 7.00.1081 45,328 Ssmsso70.dll

16-May-2003 00:18 7.00.1094 24,848 Ssnmpn70.dll

26-Sep-2002 20:30 28,408 Ums.dbg

26-Sep-2002 20:27 7.00.1079 57,616 Ums.dll

16-May-2003 13:31 7.00.1094 151,552 Xpweb70.dll

还 注意 由于文件相关性, 的最新修复程序包含这些文件可能包含其他文件。

回到顶端

替代方法

要解决此问题, 必须增加查询超时期限。 若要这样, 请使用 SQLServer 中查询等待选项。

有关查询等待选项, 请访问以下 Microsoft 网站:

()

回到顶端

状态

Microsoft 已确认这是列出了本文 " 适用于 " 一节中 Microsoft 产品中存在问题。

回到顶端

参考

有关软件更新, 请单击下列文章编号以查看 Microsoft 知识库中相应:

824684 () 是, 用于描述 Microsoft 软件更新标准术语描述

有关 SQLServer, 中 maxdegreeofparallelism 选项请访问以下 Microsoft 网站:

()

好复杂啊!!!!!!

也可访问:

DB2和其他数据库在一些SQL语法上的区别?

Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。

SQL Server是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比Access要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL语言,两者基本上都可以通用的。SQL Server还有更多的扩展,可以用存储过程,数据库大小无极限限制。

mysql2000和sql2000数据库的区别

1.根本的区别是它们遵循的基本原则

二者所遵循的基本原则是它们的主要区别:开放vs保守。SQL服务器的狭隘的,保守的存储引擎与MySQL服务器的可扩展,开放的存储引擎绝然不同。虽然你可以使用SQL服务器的Sybase引擎,但MySQL能够提供更多种的选择,如MyISAM, Heap, InnoDB, and Berkeley DB。MySQL不完全支持陌生的关键词,所以它比SQL服务器要少一些相关的数据库。同时,MySQL也缺乏一些存储程序的功能,比如MyISAM引擎联支持交换功能。

2.性能:先进的MySQL

纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式MyISAM。MyISAM 数据库与磁盘非常地兼容而不占用过多的CPU和内存。MySQL可以运行于Windows系统而不会发生冲突,在UNIX或类似UNIX系统上运行则更好。你还可以通过使用64位处理器来获取额外的一些性能。因为MySQL在内部里很多时候都使用64位的整数处理。Yahoo!商业网站就使用MySQL作为后台数据库。

当提及软件的性能,SQL服务器的稳定性要比它的竞争对手强很多。但是,这些特性也要付出代价的。比如,必须增加额外复杂操作,磁盘存储,内存损耗等等。如果你的硬件和软件不能充分支持SQL服务器,我建议你最好选择其他如DBMS数据库,因为这样你会得到更好的结果。

3.发行费用:MySQL不全是免费,但很便宜

当提及发行的费用,这两个产品采用两种绝然不同的决策。对于SQL服务器,获取一个免费的开发费用最常的方式是购买微软的Office或者Visual Studio的费用。但是,如果你想用于商业产品的开发,你必须还要购买SQL Server Standard Edition。学校或非赢利的企业可以不考虑这一附加的费用。

4.安全功能

MySQL有一个用于改变数据的二进制日志。因为它是二进制,这一日志能够快速地从主机上复制数据到客户机上。即使服务器崩溃,这一二进制日志也会保持完整,而且复制的部分也不会受到损坏。

在SQL服务器中,你也可以记录SQL的有关查询,但这需要付出很高的代价。

安全性

这两个产品都有自己完整的安全机制。只要你遵循这些安全机制,一般程序都不会出现什么问题。这两者都使用缺省的IP端口,但是有时候很不幸,这些IP也会被一些黑客闯入。当然,你也可以自己设置这些IP端口。

恢复性:先进的SQL服务器

恢复性也是MySQL的一个特点,这主要表现在MyISAM配置中。这种方式有它固有的缺欠,如果你不慎损坏数据库,结果可能会导致所有的数据丢失。然而,对于SQL服务器而言就表现得很稳键。SQL服务器能够时刻监测数据交换点并能够把数据库损坏的过程保存下来。

Oracle和SQL Server之间的区别,已经有很多篇文章从企业的角度和数据库管理员的角度出发描写了两者之间的一般差别。在这篇文章里面,我将会从应用程序的角度向你描述SQL erver 和oracle平台之间的区别,并且将会讨论开发不依赖于数据库环境的应用程序的几种可能的方法。与此同时,我不会再论讨对于应用程序来说,两个平台之间显而易见的区别,例如表的分割和索引。

定义通用接口和语言有很少的几种通用语言和接口可以让应用程序不依赖于数据库,想来也可以以同样的方式应用在关系型数据库上面: ANSI是美国国家标准局定义的,这是一家志愿者成员的组织(用私人基金运转),他们在有关设备和程序等广泛领域内开发了国家承认的标准。在数据库领域,ANSI定义了编写SQL命令的标准,假设命令可以运行在任何的数据库上,而不需要更改命令的语法。ODBC是开放数据库连接(ODBC)接口,微软定义的,它可以让应用程序访问数据库管理系统(DBMS)中的数据,使用SQL作为访问数据的标准。ODBC允许最大的互联性,这意味着一个单个的应用程序可以访问不同的数据库管理系统。然后,应用程序终端用户可以添加开放数据库连接(ODBC)数据库驱动来将应用程序与他们所选择的数据库管理系统链接上。 OLE DB是ODBC的继承者,是一组允许例如基于VB、C++、Access等任何可以连接到类似SQL Server、Oracle、DB2、MySQL等后台的“前台”的软件组件。在许多种情况下,OLE DB组件都比原有的ODBC提供了好得多的性能。 JDBC(Java数据库连接)应用程序接口是Java编程语言和广泛范围的数据库,SQL数据库和其他表列数据源(例如电子表格或者普通文本文件)之间,进行不依赖于数据库的连接的行业标准。JDBD应用程序接口为基于SQL的数据库访问提供了调用级别的应用程序接口。真实世界中的通用接口不幸的是,并不是所有数据库级别的命令都是ANSI,每个数据库平台都有自己的扩展功能。对于ANSI或者通用接口,一般来说都代表着几本功能,因此也可能意味着丧失了性能方面的竞争力。对于小型数据库和小型应用程序来说,要维护对数据库的通用访问是简单的,但是当数据库和/或应用程序变得越来越大,越来越复杂,你就不得不向代码中添加功能。

SQL Server和Oracle的常用函数对比

---------数学函数

1.绝对值

S:select abs(-1) value

O:select abs(-1) value from dual

2.取整(大)

S:select ceiling(-1.001) value

O:select ceil(-1.001) value from dual

3.取整(小)

S:select floor(-1.001) value

O:select floor(-1.001) value from dual

4.取整(截取)

S:select cast(-1.002 as int) value

O:select trunc(-1.002) value from dual

5.四舍五入

S:select round(1.23456,4) value 1.23460

O:select round(1.23456,4) value from dual 1.2346

6.e为底的幂

S:select Exp(1) value 2.7182818284590451

O:select Exp(1) value from dual 2.71828182

7.取e为底的对数

S:select log(2.7182818284590451) value 1

O:select ln(2.7182818284590451) value from dual; 1

8.取10为底对数

S:select log10(10) value 1

O:select log(10,10) value from dual; 1

9.取平方

S:select SQUARE(4) value 16

O:select power(4,2) value from dual 16

10.取平方根

S:select SQRT(4) value 2

O:select SQRT(4) value from dual 2

11.求任意数为底的幂

S:select power(3,4) value 81

O:select power(3,4) value from dual 81

12.取随机数

S:select rand() value

O:select sys.dbms_random.value(0,1) value from dual;

13.取符号

S:select sign(-8) value -1

O:select sign(-8) value from dual -1

----------三角函数相关

14.圆周率

S:SELECT PI() value 3.1415926535897931

O:不知道

15.sin,cos,tan 参数都以弧度为单位

例如:select sin(PI()/2) value 得到1(SQLServer)

16.Asin,Acos,Atan,Atan2 返回弧度

17.弧度角度互换(SQLServer,Oracle不知道)

DEGREES:弧度-〉角度

RADIANS:角度-〉弧度

---------数值间比较

18. 求集合最大值

S:select max(value) value from

(select 1 value

union

select -2 value

union

select 4 value

union

select 3 value)a

O:select greatest(1,-2,4,3) value from dual

19. 求集合最小值

S:select min(value) value from

(select 1 value

union

select -2 value

union

select 4 value

union

select 3 value)a

O:select least(1,-2,4,3) value from dual

20.如何处理null值(F2中的null以10代替)

S:select F1,IsNull(F2,10) value from Tbl

O:select F1,nvl(F2,10) value from Tbl

--------字符串函数

21.求字符序号

S:select ascii('a') value

O:select ascii('a') value from dual

22.从序号求字符

S:select char(97) value

O:select chr(97) value from dual

23.连接

S:select '11'+'22'+'33' value

O:select CONCAT('11','22')||33 value from dual

23.子串位置 --返回3

S:select CHARINDEX('s','sdsq',2) value

O:select INSTR('sdsq','s',2) value from dual

23.模糊子串的位置 --返回2,参数去掉中间%则返回7

// 本文转自 C++Builder 研究 - [url][/url]

S:select patindex('%d%q%','sdsfasdqe') value

O:oracle没发现,但是instr可以通过第四个参数控制出现次数

select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6

24.求子串

S:select substring('abcd',2,2) value

O:select substr('abcd',2,2) value from dual

25.子串代替 返回aijklmnef

S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value

O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual

26.子串全部替换

S:Replace

O:select Translate('fasdbfasegas','fa','我' ) value from dual

27.长度

S:len,datalength

O:length

28.大小写转换 lower,upper

29.单词首字母大写

S:没发现

O:select INITCAP('abcd dsaf df') value from dual

30.左补空格(LPAD的第一个参数为空格则同space函数)

S:select space(10)+'abcd' value

O:select LPAD('abcd',14) value from dual

31.右补空格(RPAD的第一个参数为空格则同space函数)

S:select 'abcd'+space(10) value

O:select RPAD('abcd',14) value from dual

32.删除空格

S:ltrim,rtrim

O:ltrim,rtrim,trim

33. 重复字符串

S:select REPLICATE('abcd',2) value

O:没发现

34.发音相似性比较(这两个单词返回值一样,发音相同)

S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')

O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual

SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差

返回0-4,4为同音,1最高

--------------日期函数

35.系统时间

S:select getdate() value

O:select sysdate value from dual

36.前后几日

直接与整数相加减

37.求日期

S:select convert(char(10),getdate(),20) value

O:select trunc(sysdate) value from dual

select to_char(sysdate,'yyyy-mm-dd') value from dual

38.求时间

S:select convert(char(8),getdate(),108) value

O:select to_char(sysdate,'hh24:mm:ss') value from dual

39.取日期时间的其他部分

S:DATEPART 和 DATENAME 函数 (第一个参数决定)

O:to_char函数 第二个参数决定

参数---------------------------------下表需要补充

year yy, yyyy

quarter qq, q (季度)

month mm, m (m O无效)

dayofyear dy, y (O表星期)

day dd, d (d O无效)

week wk, ww (wk O无效)

weekday dw (O不清楚)

Hour hh,hh12,hh24 (hh12,hh24 S无效)

minute mi, n (n O无效)

second ss, s (s O无效)

millisecond ms (O无效)

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

40.当月最后一天

S:不知道

O:select LAST_DAY(sysdate) value from dual

41.本星期的某一天(比如星期日)

S:不知道

O:SELECT Next_day(sysdate,7) vaule FROM DUAL;

42.字符串转时间

S:可以直接转或者select cast('2004-09-08'as datetime) value

O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;

43.求两日期某一部分的差(比如秒)

S:select datediff(ss,getdate(),getdate()+12.3) value

O:直接用两个日期相减(比如d1-d2=12.3)

SELECT (d1-d2)*24*60*60 vaule FROM DUAL;

44.根据差值求新的日期(比如分钟)

S:select dateadd(mi,8,getdate()) value

O:SELECT sysdate+8/60/24 vaule FROM DUAL;

45.求不同时区时间

S:不知道

O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;

-----时区参数,北京在东8区应该是Ydt-------

AST ADT 大西洋标准时间

BST BDT 白令海标准时间

CST CDT 中部标准时间

EST EDT 东部标准时间

GMT 格林尼治标准时间

HST HDT 阿拉斯加—夏威夷标准时间

MST MDT 山区标准时间

NST 纽芬兰标准时间

PST PDT 太平洋标准时间

YST YDT YUKON标准时间

Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:

函数 Oracle Microsoft SQL Server

把字符转换为ASCII ASCII ASCII

字串连接 CONCAT (expression + expression)

把ASCII转换为字符 CHR CHAR

返回字符串中的开始字符(左起) INSTR CHARINDEX

把字符转换为小写 LOWER LOWER

把字符转换为大写 UPPER UPPER

填充字符串的左边 LPAD N/A

清除开始的空白 LTRIM LTRIM

清除尾部的空白 RTRIM RTRIM

字符串中的起始模式(pattern) INSTR PATINDEX

多次重复字符串 RPAD REPLICATE

字符串的语音表示 SOUNDEX SOUNDEX

重复空格的字串 RPAD SPACE

从数字数据转换为字符数据 TO_CHAR STR

子串 SUBSTR SUBSTRING

替换字符 REPLACE STUFF

将字串中的每个词首字母大写 INITCAP N/A

翻译字符串 TRANSLATE N/A

字符串长度 LENGTH DATELENGTH or LEN

列表中最大的字符串 GREATEST N/A

列表中最小的字符串 LEAST N/A

如果为NULL则转换字串 NVL ISNULL

日期函数

函数 Oracle Microsoft SQL Server

日期相加 (date column +/- value) or

ADD_MONTHS DATEADD

两个日期的差 (date column +/- value) or

MONTHS_BETWEEN DATEDIFF

当前日期和时间 SYSDATE GETDATE()

一个月的最后一天 LAST_DAY N/A

时区转换 NEW_TIME N/A

日期后的第一个周日 NEXT_DAY N/A

代表日期的字符串 TO_CHAR DATENAME

代表日期的整数 TO_NUMBER

(TO_CHAR)) DATEPART

日期舍入 ROUND CONVERT

日期截断 TRUNC CONVERT

字符串转换为日期 TO_DATE CONVERT

如果为NULL则转换日期 NVL ISNULL

转换函数

函数 Oracle Microsoft SQL Server

数字转换为字符 TO_CHAR CONVERT

字符转换为数字 TO_NUMBER CONVERT

日期转换为字符 TO_CHAR CONVERT

字符转换为日期 TO_DATE CONVERT

16进制转换为2进制 HEX_TO_RAW CONVERT

2进制转换为16进制 RAW_TO_HEX CONVERT

其它行级别的函数

函数 Oracle Microsoft SQL Server

返回第一个非空表达式 DECODE COALESCE

当前序列值 CURRVAL N/A

下一个序列值 NEXTVAL N/A

如果exp1 = exp2, 返回null DECODE NULLIF

用户登录账号ID数字 UID SUSER_ID

用户登录名 USER SUSER_NAME

用户数据库ID数字 UID USER_ID

用户数据库名 USER USER_NAME

当前用户 CURRENT_USER CURRENT_USER

用户环境(audit trail) USERENV N/A

在CONNECT BY子句中的级别 LEVEL N/A

合计函数

函数 Oracle Microsoft SQL Server

Average AVG AVG

Count COUNT COUNT

Maximum MAX MAX

Minimum MIN MIN

Standard deviation STDDEV STDEV or STDEVP

Summation SUM SUM

Variance VARIANCE VAR or VARP

Oracle还有一个有用的函数EXTRACT,提取并且返回日期时间或时间间隔表达式中特定的时间域:

EXTRACT(YEAR FROM 日期)

数据完整性约束的数据完整性约束:

1 数据的完整性

约束是用来确保数据的准确性和一致性。数据的完整性就是对数据的准确性和一致性的一种保证。

数据完整性(Data Integrity)是指数据的精确(Accuracy)和可靠性(Reliability)。

分为以下四类:

1) 实体完整性:规定表的每一行在表中是惟一的实体。

2) 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。

3) 参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。

4) 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。

2 完整性约束的类型:

可分为三种类型:与表有关的约束、域(Domain)约束、断言(Assertion)

1) 与表有关的约束:是表中定义的一种约束。可在列定义时定义该约束,此时称为列约束,也可以在表定义时定义约束,此时称为表约束。

2) 域(Domain)约束:在域定义中被定义的一种约束,它与在特定域中定义的任何列都有关系。

3) 断言(Assertion):在断言定义时定义的一种约束,它可以与一个或多个表进行关联。

一、 与表有关的约束:包括列约束(表约束+NOT NULL)和表约束(PRIMARY KEY、foreign key、check、UNIQUE) 。

(1) not null(非空)约束: 只用于定义列约束。

语法如下:

Colunm_name datatype | domain not null

实例:

create table Employee

(

emp_id int not null,

emp_name varchar(10) not null,

address varchar(40) ,

)

创建之后,如果往表Employee表中非空约束中插入空值,insert into Employee values(1,null,'neimeng')将会出错。如下:

Msg 515, Level 16, State 2, Line 1

Cannot insert the value NULL into column 'emp_name', table 'Student.dbo.Employee';

column does not allow nulls. INSERT fails.

The statement has been terminated.

(2) unique(惟一)约束:用于指明创建惟一约束的列上的取值必须惟一。

语法如下:

Colunm_name datatype | domain unique

实例:

create table EmployeeInfo

(

emp_id int not null,

emp_name varchar(10) not null,

phone char(11) unique,

address varchar(40) ,

)

如下往EmployeeInfo插入数据时,如果两条记录的phone不惟一,

insert into EmployeeInfo values(1,'abcdwxc','neimeng','13612345678')

insert into EmployeeInfo values(2,'terry','neimeng','13612345678')

则会出现错误。如下:

(1 row(s) affected)

Msg 2627, Level 14, State 1, Line 2

Violation of UNIQUE KEY constraint 'UQ__EmployeeInfo__060DEAE8'. Cannot insert duplicate key in object 'dbo.EmployeeInfo'.

The statement has been terminated.

除了在定义列时添加unique约束外,也可以将unique约束作为表约束添加。即把它作为表定义的元素。

语法如下:

[CONSTRAINT constraint_name] unique (column1,column2,.....)

实例:

create table EmployeeInfo

(

emp_id int not null,

emp_name varchar(10) not null,

phone char(11)

address varchar(40) ,

constraint p_uniq unique(phone)

)

(3) primary key(主键)约束:用于定义基本表的主键,起惟一标识作用,其值不能为null,也不能重复,以此来保证实体的完整性。

语法如下:

Colunm_name datatype | domain primary key

实例:

drop table EmployeeInfo

create table EmployeeInfo

(

emp_id int primary key,

emp_name varchar(10) not null,

phone char(11),

address varchar(40) ,

)

如果向EmployeeInfo表插入的emp_id重复了或者插入时emp_id为null值,则会出错。

可以在创建表时,创建主键约束,也可创建表完成以后,创建主键,例如:

alter table EmployeeInfo

add constraint e_prim primary key(emp_id)

primary key 与 unique的区别:

1.在一个表中,只能定义一个primary key约束,但可定义多个unique约束。

2.对于指定为primary key的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于unique所约束的惟一键,则允许为null,只是null值最多有一个。

(4) foreign key(外键)约束:定义了一个表中数据与另一个表中的数据的联系。

foreign key约束指定某一个列或一组列作为外部键,其中包含外部键的表称为子表,包含外部键所引用的主键的表称为父表。系统保证,表在外部键上的取值要么是父表中某一主键,要么取空值,以此保证两个表之间的连接,确保了实体的参照完整性。

语法如下:

Colunm_name datetype | domain references table_name(column)

[match full|partial|simple] //注:sqlserver不支持。

[referential triggered action]

说明:table_name为父表的表名,column为父表中与外键对应的主键值。

[match full|partial|simple]为可选子句,用于设置如何处理外键中的null值。

[referential triggered action]也为可选子句,用于设置更新、删除外键列时的操作准则。

可以为表的一列或多列创建foreign key 约束,如果为多列创建 foreign key约束,将分别与主表中的相应主键相对应。

实例:

create table EmployeeInfo

(

emp_id int primary key,

emp_name varchar(10) not null,

account char(4) primary key,

phone char(11)

address varchar(40) ,

)

create table Emp_Sal

(

emp_id int , account CHAR(4) ,salary DECIMAL(5,1),

CONSTRAINT E_SAL FOREIGN KEY(emp_id,account) REFERENCES EmployeeInfo (emp_id,account))

)

也可以表创建以后添加到表上。如下:

create table Emp_Sal

(

emp_id int ,emp_name varchar(10) not null, account CHAR(4) ,salary DECIMAL(5,1),

)

alter table Emp_Sal

add CONSTRAINT E_SAL FOREIGN KEY(emp_id,account) REFERENCES EmployeeInfo (emp_id,account)

该外键的作用:确保表Emp_Sal的每个emp_id列都对应表EmployeeInfo中相应的emp_id。此时,表EmployeeInfo为父表,而表Emp_Sal为子表。子表的emp_id列参照父表的emp_id列。

如果想在子表的emp_id列插入一个值,首先父表的emp_id列必须存在,否则会插入失败。如果想从父表的emp_id删除一个值,则必须无删除子表emp_id列中所有与之对应的值。

(注:foreign key 列上的取值可以取null)。

潜在问题:由于foreign key列上可以取空值,DBMS将跳过对foreign key约束的检查,因此如果插入Emp_Sal如下数据:

insert into Emp_Sal values(6,null,null) 则插入到Emp_Sal中,但其主表的相关列却不存在。

解决办法:

(1)将联合外键的列添加not null约束,但这限制了用户的部分操作。

(2)采用Match子句。(sqlserver不支持).

更新、删除操作规则:

在删除或更新有primary key值的行,且该值与子表的foreign key中一个或多个值相匹配时,会引起匹配完整性的丧失。

在foreign key创建语法中,提供了可选的on update和on delete子句,也就是上面的[referential triggered action]。可用此保持引用完整性。

on update / on delete

no action|cascade|restrict|set null|set default

no action:更新或删除父表中的数据时,如果会使子表中的外键违反引用完整性,该动作将被禁止执行。不过在某些条件下,可出现暂时的,但在数据的最终状态中,不能违反外键的引用完整性。

cascade: 当父表中被引用列的数据被更新或删除时,子表中的相应的数据也被更新或删除。

restrict:与no action规则基本相同,只是引用列中的数据永远不能违反外键的引用完整性,暂时的也不行。

set null:当父表数据被更新或删除时,子表中的相应数据被设置成Null值,前提是子表中的相应列允许null值。

set default:当父表数据被更新或删除时,子表中的数据被设置成默认值。前提是子表中的相应列设置有默认值。

(5) check(校验)约束:用来检查字段值所允许的范围。DBMS每当执行delete,insert或update语句时,都对这个约束过滤。如果为true,则执行。否则,取消执行并提示错误。

列定义语法如下:

Column datetype | domain check(search condition)

表约束语法如下:

constraint constraint_name check(search condition)

实例如下:

create table Emp_Sal

(

emp_id int , account CHAR(4) ,salary DECIMAL(5,1),

constraint validsal check(salary =1000 and salary=10000)

)

如果此时,再往表中插入如下语句则会出错:(因为不满足salary大于等于1000的约束。)

insert into Emp_Sal values(8,'12324343',800.0)

二、 域约束:(sqlserver 不支持)

语法如下:

create domain domain_name as data type

[default default_value]

[constraint constraint_name] check(value condition expression)

例如:

create domain valid_no as int

constraint constraint_no check(value between 100 and 999)

然后创建表时,使用valid_no域。

create table TestDomain

(

emp_id valid_no,

emp_name varchar(10),

)

三、断言约束:不必与特定的列绑定,可以理解为能应用于多个表的check约束,因此必须在表定义之外独立创建断言。

语法如下:

create assertion constraint_name

check search condition

例如:

create assertion name

check (Emp_Sal.emp_id in(select emp_id from EmployeeInfo where emp_name is not null)

添加断言后,每当试图添加或修改Emp_Sal表中的数据时,就对断言中的搜索条件求值,如果为false,则取消执行,给出提示

关于SQL基础版 无法启动服务器

帮你在网上搜索一下,应该是master数据库损坏了,可以通过以下3步修复吧,网上是这么说的

1 .备份自己的重要的数据库文件 MDF,LDF文件

2 .重建Master 如果不行,重装 sqlserver

3 .附加你的数据库文件进sqlserver

自己仔细看这个

如果是master文件损坏,有两咱办法可以解决:

1.重新安装SQL,对master进行修复

也可能通过SQL的命令来实现修复数据库,具体操作方法:

2.从其他地方复制一个同版本的master数据库文件,这种方法操作比较复杂,可参考:

如果是Master坏了,又不想重装的话,可以用SQL自带的工具进行重建。具体做法,可以参考:

上面写了一些我在重建Master中的心得。

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


名称栏目:sqlserver有断言,sql 断言
文章路径:http://pwwzsj.com/article/hdgjse.html