• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> 数据库 >> Firebird >> 详细内容
 

推荐文章

 
 

热点文章

  • Firebird v2.1.0.17798-0 - 开源数据库
  • firebird database (快速入門)
  • Windows平台上Firebird数据库的安装
  • FireBird数据库安装以及其可视化管理软件(图形管理器)
  • 在ubuntu linux上安装设置firebird
  • Firebird 数据库安装
  • InterBase/FireBird和Microsoft SQL Server之技术比较
  • 用IBExpert优化Firebird/Interbase技巧集1
  • firebird数据库介绍
  • Firebird/InterBase内置函数使用说明
  • Firebird常用SQL
  • firebird数据库的修复
 
 

相关文章

  • 用了下firebird,发现真的不错哦
  • 一个关于firebird数据库的sql查询方法
  • Firebird数据库文件大小增长很快的原因
  • 用IBExpert进行Firebird数据库的跨库操作
  • firebird如何提取从n开始的m条记录(数据分页)
  • Firebird/Interbse SQL语言疑难解答
  • Firebird的备份工具(nbackup)介绍
  • firebird数据库的修复
  • Firebird常用SQL
  • Firebird/InterBase内置函数使用说明
  • firebird数据库介绍
  • 用IBExpert优化Firebird/Interbase技巧集1
 
 

百度搜索

 
 

MSSQL数据库转到Firebird数据库的问题

  • 阅览次数:
  • 文章来源: CodePub整理
  • 原文作者:
  • 整理日期: 2008-05-03
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

huangpin:
我是FB新手,在我的原MSSQL代码中,存在依赖于局部临时表(注意是局部而不是全局)的操作,现在转到FB了怎么办?而且,为性能计,我还用到了MSSQL里面的表变量类型(从MSSQL的自定义函数里返回表变量),这可怎么办啊?大家给我出出主意!
另外,在MSSQL里面的语句:
1)select * into tmpTable from ATable
(复制ATable表中的数据到tmpTable表)

2)update ATable set AField=b.BField from ATable a,BTable b where a.ID=b.ID
(根据BTable中的数据更新ATable中的数据)

3)insert ATable select * from BTable
(将BTable中的数据追加到ATable中,ATable与BTable结构一致)

这些语句改写成FB(或等价物)应该怎么做?如果能搞定这几个问题,则我的迁移工作将会极为顺利,高手帮帮我啊!!!谢谢!!

lmf:
局部临时表,可以考虑用全局临时表或derivative table,不过派生表有的时候效率不够。表变量有点不太明白,有可能通过EXECUTE STATAMENT解决。
1.要先建tmpTable的表结构。当然为了方便,可以考虑自己编写UDF函数或存储过程,这样可以尽量保持和原来使用一样
2.可以使用以下语句代替:
update ATable set AField=(select BField from BTable where BTable.ID=ATable.ID)
where exists (select BField from BTable where BTable.ID=ATable.ID)
3.如果ATable和BTable的结构完全一致,保持字段个数和顺序,则不需要改变

huangpin:
derivative table 有些什么性质?在MSSQL里,表变量就是类型为表的变量,可以跟普通表一样进行各种操作.可以理解为在内存中的一张表,当超出作用域范围后自动销毁.
对于update ATable set AField=(select BField from BTable where BTable.ID=ATable.ID)
where exists (select BField from BTable where BTable.ID=ATable.ID)能否写成如下更简洁的形式?:
update ATable set AField=(select BField from BTable where BTable.ID=ATable.ID) 不要后面的Where子句了,按理来说也应该行得通啊,因为此语句里本身就包含了足够的条件.
多谢各位的关注!

lmf:

对于update ATable set AField=(select BField from BTable where BTable.ID=ATable.ID)
where exists (select BField from BTable where BTable.ID=ATable.ID)
估计根据SQL92标准,需要where子句。如果不需要,则对于在BTable中找不到的记录会在ATable中填null值
Firebird 对于临时表不大支持。如果原来用了大量的临时表,可能需要作不少改动了。我提到全局临时表,和派生表,是觉得用这两种方法基本上能解决临时表的问题。临时表可以用到最少。我自己就几乎不用临时表,只不过有的时候用临时表比不用要提高效率。派生表指的是这种形式:SELECT ... FROM (SELECT... FROM...)。括号里的指的就是派生表。除了用派生表,在FB2.1中还可以用CTE,基本上也能够起到临时表作用。
我现在基本上不用或少用存储过程,用这些手段应该差不多够了。有可能有极少数地方还是需要用临时表来做优化,那就采用全局临时表算了。

huangpin:
你这么说,我大致明白派生表是什么东西了,但是,显然有一个问题是"派生表"所无法解决的,派生表里的数据无法保持和更改.它看起来只能把数据读取出来!!

lmf:
你的有关临时表的问题估计要费不少心血了。全局临时表应该有可能解决你一部分问题。

neumann:
全都可以实现,而且不很难。

1)select * into tmpTable from ATable
(复制ATable表中的数据到tmpTable表)

INSERT INTO tmpTable SELECT * FROM aTable

2)update ATable set AField=b.BField from ATable a,BTable b where a.ID=b.ID
(根据BTable中的数据更新ATable中的数据)

UPDATE ATable Set AField =
(SELECT b.BField FROM BTable b
WHERE EXISTS (SELECT a.* FROM ATable a WHERE a.Id = b.Id))

3)insert ATable select * from BTable
(将BTable中的数据追加到ATable中,ATable与BTable结构一致)

lmf:
to neumann:
对于1,如果tmpTable不存在,还是需要根据ATable来自己预先创建的

上一篇:一个关于firebird数据库的sql查询方法
下一篇:用了下firebird,发现真的不错哦
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号