sql server 2005 使用备忘

来源:互联网 发布:哪个牌子手机网络好 编辑:程序博客网 时间:2024/06/01 07:55

     最近做一次数据迁移, 目标数据库是sql server 2005, sql server 有几年没使用了.

 

     一. oracle 很多时候是一个数据库建一个数据库实例, 多个用户. sql server 2005 是一个数据库, 多个数据库实例, 多个用户. 所以执行的脚本最好加上 use tempNews --tempNews 是数据库实例.

 

    二. oracle 的执行语句是通过分号 ";" 在分开的, 而 mssql 是用 "go" , 还有点不同, "go" 必须是独自一行, 而分号不需要. 但是在存储过程里面, 不管是oracle 还是 mssql 都是通过分号 ";" 分开执行语句的.

 

    三. oracle 的字符串连接符是两竖线 "||", mssql 是加号 "+".

 

    四. oracle 的guid 是通过 sys_guid() 产生, 类型是32位的字符串, 而 mssql 2005 的guid 是通过 newId(), 有个专门的类型uniqueidentifier;

         还有一点需要注意, oracle 的guid 是没有中横线 "-" 如asd23a3sda3sd..... , mssql 2005 有中横线, 如 asd23a3s-da3sd....

 

    五. mssql 2005 增加了字符大字段类型varchar(max) ,  用于替换以前的大字段类型text, 都是只能存2G 以内的字符数据.

         oracle 的 Long 类型(一个表只能有一个Long 类型字段)也是存2G 以内的字符数据, 但是 Clob 能存4G 以内的字符数据, 所以从Clob 转为 text, 超出的数据丢失的情况将不可以避免.

         注意, oracle 是可以用to_char() 方法把clob 转换为字符串的, 所以把带Clob 字段的表数据导出为 insert 语句脚本是可以的, 说来惭愧呢, 这是用客户端工具toad 的导出表的功能时候注意到的.  

 

    六. 下面写的是一些存储过程的不同的地方(没有涉及异常方面)

 

    1. oracle  创建存储过程可以用 create or replace, 但是 mssql 不行, 第一次创建用 create, 修改用 alter.

 

    2. oracle 的存储过程的简单结构是:

 

        create or replace procedure 存储过程名称 ( 参数,.... )

        as --is 也可以

        变量A;........... --变量可以赋予默认值

        begin

            --select a into 变量A from tableA;

            --变量A := 0;

            代码

        end;

 

        mssql 的存储过程的简单结构是:

 

        create procedure 存储过程名称 @参数,.........     --注意, 这里没有括号

        as

        begin

            --declare @变量A;........       --变量不可以赋予默认值, 类似于声明           

            --set @变量A = 0;             --初始化变量A, 如果使用未初始化的变量, 将会产生错误

            --select @变量A= a from tableA;  --初始化变量A的另一种方法.

            代码

        end

 

      3. oracle 的存储过程的参数是用 括号 包围起来的, 但是 mssql 是没有括号包围的. 虽然都是用 exec 来执行存储过程的, 但是oracle 就只有 exec 存储过程名称(实参1, ....) 这样的方式, 而 mssql 的参数传递可以有多个方式, 这可能就是有没括号的区别了.

 

      4. 在oracle 的存储过程里面, 执行其他存储过程, 你只需要写上, "其他存储过程名称(实参1,.....);", 而在 mssql 就要写 "exec 其他存储过程名称 实参1,.....;".

 

      5. oracle 的存储过程的变量是在, as 和 begin 中间定义的, 可以赋予默认值. mssql 的存储过程的变量是在begin 和 end 中间声明的, 声明的时候不能赋予默认值.

 

      6. oracle 的存储过程变量赋值可以用 "变量A := 0;" 或者 "select a into 变量A from tableA;", 而mssql 的变量赋值是用 "set @变量A = 0;" 或者 "select @变量A = a from tableA".

 

      7. mssql 的游标的使用方法一:

          declare cr_cursor cursor for select 语句;  --1.定义游标

          open cr_cursor --2.打开游标

          fetch From cr_cursor into @paraId --3.提取游标

          WHILE @@fetch_status=0

          BEGIN

          代码........;

          fetch next From cr_cursor into @paraId 
          END;

          close cr_cursor --4.关闭游标
          deallocate cr_cursor --5.释放游标

 

      8. mssql 打印信息到窗口很方便呢, 用 "print 字符串" 就行了. 遇到输出的变量非字符串的, 用CONVERT 转换就行了, 对于uniqueidentifier 类型, CONVERT(varchar(40),@uniqueidentifierPara,40)  第三个参数不能少.

 

      9. 如果字符串中有中文

              N'中文'

          以 N 前缀标记指定该字符串为 Unicode 字符串, 这个让人想到了C++ 的 L'中文', 宽字符.

 

 

 

 

 

原创粉丝点击