1.没有行号的概念。这造成很多不方便,虽然可以用自增主键来处理,可是看一下分页处理的存储过程,真是又臭又长。2.Select 语句中不能使用iif()这么一个二先一的函数,恐怕在所有的语言中都有吧?怎么到了这里就得用case来处理呢?郁闷!3.没有日期这种数据类型很多时间业务只精确到日期,关心不到时分秒,虽然可以使用自定义数据类型,但是日期的加减运算更是费劲,没办法只能用8个字符来表示。4.几乎变态式的的isnull()如果让你看一个你不了解的语言,第一反应,此函数应该检查一个变量是不是NULL,返回一个逻辑值,可在ms Sql中就这不是这样!它检查一个字段后,把字段的值返回,真是费解。这是我在学SQL中遇到的问题,希望大家也提出自己的看法.

解决方案 »

  1.   

    --上面几点.SQL Server 其实都支持.看你如何去用了.
    --行号可以自己生成.
    --iif() 可以用 case when 替代
    --datetime类型 就是精确到秒的.日期的加减用 datediff
    --isnull 是判断是否为空的函数,isnul(字段,0) 表示:如果字段表示为空,用0来表示. 和Case when 类似的.
      

  2.   

    用习惯了ORACLE,过度到SQL Server需要一个过程,时间长了,你会习惯的!
      

  3.   

    行号, 2005有了.
    iif , 这个没有什么好说, 用习惯了case when
    日期, 单纯的日期嘛, 可以用int, 出结果的时候用 dateadd(day, 0, int的日期字段), 则无论在那里, 对日期的处理, 似乎都离不开一些函数, sql也不例外
    isnull, 首先, sql没有逻辑型, 其次, 用isnull的主要目的, 在sql中还是对null的值进行处理, 而不是判断吧, 当然, 理解上可能会有些误会, 但还有个 is null , 如果两者你都知道, 我想还是不会有误会了.
      

  4.   

    不过, 说实在的, 2005的行号只能出现在select 列表或者 order by 中, 这还是不爽
      

  5.   

    我也是从oracle刚转过来,因为有些时候oracle成本太高了,客户无法接受,必须用MSSQL,还可以用虚拟主机,真是昧着良心再使用
      

  6.   

    数据库特性不一样,没什么好说的!其实使用习惯了,拒绝其特有特性,是开发系统的一个原则,起码移植的时候方便!都使用其最基本功能,使用起来还是没有什么太大区别的,否则当更改数据库的时候特别累!记得当年更改一个医院管理系统从ORACLE到MSSQL,天,好多代码都是重新写的,很多都不同。
    所以在那里之后,我基本上对数据库都是最基本设计,涉及到处理环节,在数据层去处理!
      

  7.   

    to jwt1982(飞星) 同感,要想支持不同的数据库,数据处理这一部分真是难死了。我提的这四点,我觉得是一个基本数据库的功能,这个死微软,妈的,总是喜欢跟人不一样。
      

  8.   

    还是Oracle的行号让大家念念不忘嘛
      

  9.   

    to ljyit(木瓜):
    你为什么不骂这个死“Oracle”什么都和别人的不一样呢?
    起码Oracle在JDBC中的处理就和别的数据库不一样。讨论技术就讨论技术,你这样感情用事,那是省省吧!
      

  10.   

    1.没有行号的概念。
    2.Select 语句中不能使用iif()
    3.没有日期这种数据类型
    4.几乎变态式的的isnull()RE...
    1.关系模型本身就是没有顺序的。看看关系代数就知道了。都是靠集合运算。
    2.语言本身问题,习惯就好了。其实功能一样,只是CASE更结构。
    3.的确很烦,我也觉得日期这一点很不人性化。
    4.看看邹老大说的,isnull()和T-SQL中的IS NULL的区别。该有的功能都有了。
      

  11.   

    因为大家都是站在SQL使用者的角度去思考这个问题。如果站在系统构架的角度去想,很能预测数据库哪天就可能会换成Oracle或是Ms SQL或是其他什么号称支持sql的数据库。虽然试图按ANSI SQL标准去设计,但结果总是事与愿违。
      

  12.   

    看到第4个问题,我明白了楼主不但是第一次接触SQLServer,而且是第一次接触数据库
      

  13.   

    以lz的标准,Oracle让你不适应的地方恐怕多如牛毛
      

  14.   

    date类型还可以只存日期部分。可是time类型就不行了,你只存个time他就是1900-1-1 时间
      

  15.   

    LZ应该先自己熟悉了MS SQL Server再发表此类言论,你不会不表示没有,你不会不表示大家都不会,现在的2005和Oracle9i/10g一样也是遵循SQL99标准,功能几乎差不多,只是数据库引擎对数据的处理模式不同导致性能上的差距,就好像你说的那几条:
    1.没有行号的概念
    这个和Oracle的实现是一样的,就连语法都差不多,恐怕是你不会用吧?
    2.Select 语句中不能使用iif()
    case when有什么不好吗?
    3.没有日期这种数据类型
    SQL Server里面日期数据类型有两种:datetime和smalldatetime,前者精确到1/300秒,占8字节,后者精确到分钟,占4字节,日期的计算用日期函数,Oracle里面也是用日期函数,哪里不同了?
    4.几乎变态式的的isnull()
    isnull()本来就不是用来判断字段或变量是否为空的,它是用来对为空的值进行转换的,虽然可以达到判断的目的,但搞SQL Server开发的谁也不会用这个去判断,直接用if 变量名 is null来判断就可以了。
    还有,Oracle的错误处理采用Oracle独有的方式,而MS SQL Server 2005采用与大多数编程语言一样的try-catch模式,恐怕还是SQL Server的编程更接近其它主流编程语言吧。
      

  16.   

    jfCSDN论坛浏览器:浏览、发帖、回复、结贴自动平均给分,下载地址:http://CoolSlob.ys168.com
      

  17.   

    刚从ms转oracle,嘿~非常不习惯。破oracle,找个表都找不到。
      

  18.   

    使用oracle和ms sql和相亲类似
    总觉得第一个是最好的!呵呵.如果楼主第一个用的是SQL就不会出现这些的困惑了吧!
      

  19.   

    MARKUP~其实我用MSSQL的时候,也不是很习惯他的日期实在是太纤细了,而且日期的计算比较麻烦顺便求教下在显示方面,如果只显示年月日,后面的精确部分不要不过总体来说,我还是觉得MS比ORACLE人性化点
      

  20.   

    to :mengluoke(梦猪) 
    convert(char(10),datetime,120) --2006-07-20邹老大在<<SQL Server2000经典编程>>里对日期处理有比较详细的说明,用int型存日期,用numeric型存时间.这个办法挺好
      

  21.   

    Oracle 和 MS-SQL都还可以.
      

  22.   

    1. 不知你所说的行号如何说,通过 SQL 查询分析器 可以看到行号
    2. SQL Server不直接支持IIF,可以通过CASE实现
    3. 有smalldatetime和datetime足够了,所有数据库的日期都是以数字模式存储,整数部分不就是日期了?再说你前台录入只录入日期数据库不就只存日期了?4. 你的函数使用错误,检查是否空值是用NULLIF()函数,ISNULL()是空值替换,而且NULLIF()比其它数据表中的ISNULL()函数功能更强大。关键是习惯,当年习惯了Sybase用SQL Server简直是痛苦,习惯了SQL Server发现用Oracle什么都得用命令行,更痛苦!好像现在Oracle11好点了
      

  23.   

    呵呵,我开始就是学的SQL
    很少用到其他数据库
    感觉还是可以的,等段时间还想转到ORACLE上去
    看来还要多花功夫了
      

  24.   

    用习惯了Oracle,改别的确实有点不习惯
      

  25.   

    gahade() ( )  
    to :mengluoke(梦猪) 
    convert(char(10),datetime,120) --2006-07-20邹老大在<<SQL Server2000经典编程>>里对日期处理有比较详细的说明,用int型存日期,用numeric型存时间.这个办法挺好
    多谢老大的指导,下次一定会用了顺便问问邹老大的<<SQL Server2000经典编程>>这个是已经出版的书还是帖?偶想看看  
     
      

  26.   

    1.ORACLE不能输出结果集 需要用游标返回
    2.没有TOP功能 虽然有row_num
    3.日期型函数一般都写成CHAR型 很恶心 转的时候还要写这个to_date
    4.还有没有自增长 要写个select id_seq from dual
      

  27.   

    4.几乎变态式的的isnull()如果让你看一个你不了解的语言,第一反应,此函数应该检查一个变量是不是NULL,返回一个逻辑值,可在ms Sql中就这不是这样!它检查一个字段后,把字段的值返回,真是费解。这个有点道理,这个函数应该叫ifnull
    SQL还有个函数Nullif
    NULLIF
    如果两个指定的表达式相等,则返回空值。语法
    NULLIF ( expression , expression )参数
    expression常量、列名、函数、子查询或算术运算符、按位运算符以及字符串运算符的任意组合。返回类型
    返回类型与第一个 expression 相同。如果两个表达式不相等,NULLIF 返回第一个 expression 的值。如果相等,NULLIF 返回第一个 expression 类型的空值。
      

  28.   

    有一定道理,如果SqlServer 什么都行,Oracle就不是市场占有第一了!