分手快乐 发表于 2015-1-16 22:21:34

MSSQL网站制作之从Oracle迁徙到SQL Server的圈套

为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。 在把Oracle查询转换为SQLServer的时分要出格小心一些不简单注重到的成绩。我们晓得,T-SQL是SQLServer的言语引擎,而Oracle的言语引擎倒是PLSQL。这两种查询言语都对ANSISQL-92尺度举行了扩大以供应分外的撑持力度。你所创立的使用程序几近都要用到这些增补特征。本文就对最经常使用的、非尺度的Oracle扩大举行了申明,同时还要先容下怎样对这些扩大举行转化以用在SQLServer情况下。  列的选择
  用PLSQL实行数据查询的时分,FROM子句是必需的,这同SQLServer的请求是一样的。SELECT语句必需选择针对的数据表。在Oracle数据库内有一种特别的表DUAL。DUAL表由Oracle连同数据字典一同创立,一切的用户都能够用称号DUAL会见该表。这个内外只要一列DUMMY,该列界说为VARCHAR2(1)范例,有一行值X。
  从DUAL表选择数据常被用来经由过程SELECT语句盘算常数表达式,因为DUAL只要一行数据,以是常数只前往一次。
  Oracle下的DUAL查询以下所示:

  SELECT‘x’FROMdual
  而对等的SQLServer查询则是上面这个模样:
  SELECT‘x’
  毗连
  Oracle用||标记作为毗连符,而SQLServer的毗连符是加号:+。
  Oracle查询以下所示:
  Select‘Name’||‘LastName’FromtableName
  对应的SQLServer查询以下所示:
  Select‘Name’+‘LastName’
  数字弃取
  Oracle数据库内有一个TRUNC函数,该函数前往m位十进制数的n位;假如省略m则n就是0位。m的值能够为负,暗示截往小数点右边m位数字。
  在SQLServer下能够用Round大概Floor。
  以下是Oracle查询:
  SELECTTRUNC(15.79,1)"Truncate"FROMDUAL;
  上面是同类查询的SQLServer版本:
  SELECTROUND(15.79,0)rounded,ROUND(15.79,0,1)truncated
  SELECTFLOOR(ROUND(15.79,0)),FLOOR(ROUND(15.79,0,1))
  数字转换
  Oracle的TO_CHAR函数能够把n位NUMBER数据范例转换为VARCHAR2数据范例,同时接纳可选的数字格局。
  SQLServer则经由过程STR函数前往数字转换以后的字符数据。不外,该函数不具便利的Format参数。
  Oracle查询以下:
  SELECTto_char(123.45,99999999999999)fromtab
  SELECTto_char(EXPIRY_DATE,DDMONYYYY)fromtab
  以下是SQLServer版本的查询:
  SELECTSTR(123.45,14)
  SELECTSTR(round(123.455,2),12,2)
  SELECTCAST(REPLACE((CONVERT(varchar(12),EXPIRYDATE,106)),,)asvarchar(9))
  LENGTH和LEN
  以下是Oracle的查询:
  SELECTLENGTH(SQLMAG)"Lengthincharacters"FROMDUAL;
  以上查询在SQLServer下是如许写的:
  SELECTLEN(SQLMAG)"Lengthincharacters"
  日期
  以上两种体系都具有各自确当前日期和工夫格局。
  Oracle获得日期和接纳以下体例:
  SYSDATE
  SQLServer则是如许的:
  GETDATE()
  你能够用各类语法操纵日期。以下的代码对Oracle日期值中的月份举行了格局调剂(前往日期再加上n月):
  Selectadd_months(sysdate,12)fromdual
  SQLServer则是以下完成一律功效的:
  Selectdateadd(mm,12,getdate())
  数据的减法也分歧。以下代码在Oracle中间接对数据举行减法操纵:
  SELECTsysdate-add_months(sysdate,12)FROMdual
  SQLServer则是如许做的:
  SELECTdatediff(dd,GetDate(),dateadd(mm,12,getdate()))
  小结
  幸而,我在从Oracle迁徙到SQLServer2000的过程当中并没有遭受太辣手的成绩。固然,一入手下手我就深知体系之间一定存在明显的差别。我但愿本文列出的不同有助于你制止一些罕见的成绩。

支持多种存储引擎。

再现理想 发表于 2015-1-19 09:22:51

这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。

若天明 发表于 2015-1-25 20:08:45

原来公司用过MYSQL自己也只是建个表写个SQL

简单生活 发表于 2015-2-3 20:00:10

个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。

莫相离 发表于 2015-2-9 05:08:22

换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的

灵魂腐蚀 发表于 2015-2-27 00:13:02

光写几个SQL实在叫无知。

柔情似水 发表于 2015-3-8 18:51:56

如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。

飘灵儿 发表于 2015-3-16 11:41:08

SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.

冷月葬花魂 发表于 2015-3-22 22:54:52

XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
页: [1]
查看完整版本: MSSQL网站制作之从Oracle迁徙到SQL Server的圈套