奋斗属于认真者!

相信自己,你行!你最棒!

 

2008年10月16日

ASP.NET数据绑定(上) [转载]

 

http://www.cnblogs.com/hjf1223/archive/2008/05/03/digging_into_binding_expression_1.html


posted @ 2008-10-16 19:37 IT人才 阅读(173) | 评论 (0)编辑 收藏

关于pL/sql和T-sql的区别

1、外连接  
  ·MS   SQL   SERVER   支持两种形式表间连接  
  ①从Sybase继承来的形式:  
  字段1   *=   字段2   (左连接)  
  字段1   =*   字段2   (右连接)  
  没有这种形式的全外连接语法  
  ②标准的外连接语法  
  left   [outer]   join   on   逻辑表达式  
      right   [outer]   join   on   逻辑表达式  
  full   [outer]   join   (全外连接)   on   逻辑表达式  
  这里的逻辑表达式   可以是很复杂的表达式例如   :A.ID=B.ID   AND   (A.Parebt_ID=1   OR   A.Parent_ID=2)  
   
  需要提醒大家的是:你写的查询语句报告过这样的错误    
    Joined   tables   cannot   be   specified   in   a   query   containing   outer   join   operators.   Joined   tables   cannot   be   specified   in   a   query   containing   outer   join   operators.   View   or   function   'dbo.VU_CAF_BILLS'   contains   joined   tables  
  这句话告诉你,你查询语句引用的视图或者子查询也用到了外连接,但是引用视图或者子查询外连接语法与你的外连接语法不一直导致的  
    例如:select   A.[ZONE],A.FLAG,A.FlagDesc,A.CAF_NO  
      from   dbo.VU_CAF_BILLS   A,TU_Flag  
      where   A.CAF_NO*=TU_Flag.ObjNo  
    视图dbo.VU_CAF_BILLS的外连接语法是标准的SQL语法,而本语句中的外连接语法却是Sybase式的外连接语法。    
   
   
  ·Oracle不支持标准的外连接语法,也没有全外连接,这是它的缺陷  
    字段1   =   字段2(+)   (左连接)  
  字段1(+)   =   字段2   (右连接)  
   
  ·使用外连接语句的用处  
  ①不想因为表连接而使主表数据行丢失,这一点毋庸多说  
  ①找某条记录在A表存在,而在B表不存在,按常规做法使用not   in   (select   查询子句)语法,  
  使用not   in   最大的缺点速度慢,原因是每个数据行都去做:select   查询子句  
  而使用下面的语法:  
    select   TU_COMPANY.*  
    from   TU_COMPANY   left   join   TU_Comp_Agent   on   TU_COMPANY.ID=TU_Comp_Agent.CompCode  
    where   TU_Comp_Agent.Id   is   null  
   
  2、触发器  
  ·从我了解到的,MS   SQL   SERVER,仅有表的触发器,而且触发时机不够丰富  
  如插入触发在子,不区分单条插入还是多条插入,也不区分插入前触发还是插入后触发  
  碰到多条数据的插入,需要使用游标处理每条插入的数据  
   
  ·Oracle提供的触发器不仅有基于表的触发器,而且其他类型的,例如数据库级的触发器:数据库启动、数据库关闭  
  对于表级的触发器,区分单条插入还是多条插入,也区分插入前触发还是插入后触发  
     
  3、表数据复制  
  ·库内数据复制  
    ·MS   SQL   Server    
  Insert   into   复制表名称   select   语句   (复制表已经存在)  
      select   字段列表   into   复制表名称   from   表   (复制表不存在)  
    ·Oracle  
      Insert   into   复制表名称   select   语句   (复制表已经存在)  
      create   table   复制表名称   as   select   语句   (复制表不存在)  
     
  ·文本文件转入、转出的批量处理  
  ·MS   SQL   Server    
  BCP命令行程序  
  ·Oracle  
      SQLLDR命令行程序  
  4、多表更新、删除  
  一条更新语句是不能更新多张表的,除非使用触发器隐含更新,我这里说的意思是:根据其他表数据更新你要更新的表  
  一般形式:  
  ·MS   SQL   Server    
    update   A  
    SET   字段1=B表字段表达式,  
      字段2=B表字段表达式  
  from   B    
  WHERE   逻辑表达式  
  ·Oracle  
    update   A  
    SET   字段1=(select   字段表达式   from   B   WHERE   ...),  
      字段2=(select   字段表达式   from   B   WHERE   ...)  
  WHERE   逻辑表达式  
     
    从以上来看,感觉oracle没有ms   sql好,主要原因:假如A需要多个字段更新,MS_SQL语句更简练  
   
  你知道刚学数据库的人怎么做上面这件事情吗,他们使用游标一条一条的处理  
   
   
  5、关于存储过程或函数中使用的临时表,两者都提供了这个功能  
  临时表,最主要的好处是,操作不留任何痕迹、不产生日志,  
  所以速度快  
    ·MS   SQL   SERVER  
      CREATE   TABLE   #表名称(........)   或者   SELECT   字段表达式列表   INTO   #表名称   FROM  
      表名称前加#即可,这些临时表都是只在一个数据库连接会话期间有效  
       
  ·Oracle    
      create   [Global]   Temporary   Table   ,加上[Global]就是全局的临时表(所有数据库连接会话都是可见的),  
      不则为私有的(在一个数据库连接会话期间有效)    
   
   
  6、动态执行SQL语句  
    ·MS   SQL   SERVER   7.0好象没有这个功能,MS   SQL   SERVER   2000已经这个功能。  
      你是不是想在存储过程的参数中传递一个表名或者在过程体里动态  
      生成一个SQL语句,你会发现很难办到。看了下面的例子:你以前的问题全解决了  
      declare   @count   int  
      declare   @SQL   nvarchar(200)  
      set   @SQL   =   N'select   count(*)   from   sysobjects'  
      exec   sp_executesql   @SQL,N'@i   int   output',@count   output  
     
     
  ·Oracle提供了两种方法实现这个功能  
      ①程序包DBMS_SQL,执行一个语句的过程:  
        打开游标(open_cursor,对于非查询语句,无此过程)  
        分析语句(Parse)  
        绑定变量(bind_variable)  
        执行语句(execute)  
        关闭游标(close_cursor,对于非查询语句,无此过程)  
      ②execute   immediate   ls_SQL  

posted @ 2008-10-16 19:03 IT人才 阅读(592) | 评论 (0)编辑 收藏

仅列出标题  

导航

统计

常用链接

留言簿(1)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜