今天是: | 首页 | 营销咨讯 | 推销技巧 | 网络营销 | 论文大全 | 外贸知识 | 市场信息 | 留言咨询 | 论坛 |
最 新 文 章
普通文章解读二八理论和长尾理论在…
普通文章雅虎倒向谷歌被反垄断部门…
普通文章网络视频营销漫路求索
普通文章涂料是否适合网络营销
普通文章IMPACT揭秘网络营销秘诀
普通文章广告也要得民心,令人生厌…
普通文章谷歌在华战略转向中小企业
普通文章博客营销文章写作技巧
普通文章网盛1800万收购中华纺织网
普通文章互联网进入营销阶段
最 新 热 门
普通文章解读二八理论和长尾理论在…
普通文章雅虎倒向谷歌被反垄断部门…
普通文章网络视频营销漫路求索
普通文章涂料是否适合网络营销
普通文章IMPACT揭秘网络营销秘诀
普通文章广告也要得民心,令人生厌…
普通文章谷歌在华战略转向中小企业
普通文章博客营销文章写作技巧
普通文章网盛1800万收购中华纺织网
普通文章互联网进入营销阶段
最 新 推 荐
推荐文章网站策划之栏目策划
推荐文章网络营销--创意致胜 充满“…
推荐文章Web2.0创业者面临艰难选择…
相 关 文 章
  • win2000server IIS和tomcat5…

  • JAVA/JSP学习系列之三(Resin…

  • WIN2003上Apache2+IIS6+Tomc…

  • PL/SQL开发中动态SQL的使用方…

  • Windows 2000下优化Oracle9i…

  • 在Windows2000ADV下配置Apac…

  • Win2003下APACHE+PHP5+MYSQL…

  • php 4 和 Php 5 共存新法

  • php访问查询mysql数据的三种…

  • PHP基本语法

  • Q
    您现在的位置: 推销员 >> 网络营销 >> 网站建设 >> 数据库 >> 文章正文
    小议主子表INT自增主键插入记录的方法
    小议主子表INT自增主键插入记录的方法
    作者:佚名 文章来源:www.top-sales.com.cn 点击数: 更新时间:2007-3-22     
    [ 字体:缩小 正常 放大 | 双击自动滚屏 ]
    请选择合适的字体颜色:

           主子表最常见的大概就是用在进销存、MRP、ERP里面,比如一张销售订单,订单Order(ID,OrderDate),订单明细OrderDetail(OrderID, ProductID, Num,Price)这个大概就是最简单的主子表了,两个表通过ID与OrderID建立关联,这里主键ID是自增的INT类型,OrderID是表OrderDetail的外键。当然,键的选择方法很多,现在我们选择的是在sql里面最简单的方法。

        对于这样的表结构,我们最常见的问题就是保存的时候怎样处理键值的问题,因为两个表关联非常的紧密,我们进行保存的时候需要把它们放在一个事务里面,这时问题就会出现,Order表中的ID是自动增长型的字段。现在需要我们录入一张订单,包括在Order表中插入一条记录以及在OrderDetail表中插入若干条记录。因为Order表中的ID是自动增长型的字段,那么我们在记录正式插入到数据库之前无法事先得知它的取值,只有在更新后才能知道数据库为它分配的是什么值,然后再用这个ID作为OrderDetail表的OrderID的值,最后更新OderDetail表。但是,为了确保数据的一致性,Order与OrderDetail在更新时必须在事务保护下同时进行,即确保两表同时更行成功,这个就会有点困扰。


    解决这类问题常见的主要有两类方法:


    一种是微软在网上书店里使用的方法,使用了四个存储过程。改装一下,使之符合现在的例子


    --存储过程一


    CREATE PROCEDURE InsertOrder

     

        @Id                INT = NULL OUTPUT,

     

        @OrderDate        DATETIME = NULL,

     

        @ProductIDList     NVARCHAR(4000) = NULL,

     

        @NumList          NVARCHAR(4000) = NULL,

     

        @PriceList          NVARCHAR(4000) = NULL

     

    AS

     

        SET NOCOUNT ON

     

        SET XACT_ABORT ON

     

        BEGIN TRANSACTION

     

       --插入主表

     

        INSERT Orders(OrderDate) select @OrderDate

     

         SELECT @Id = @@IDENTITY

     

          -- 插入子表

     

         IF @ProductIDList IS NOT NULL

     

                EXECUTE InsertOrderDetailsByList @Id, @ProductIdList, @numList, @PriceList

     

        COMMIT TRANSACTION

     

        RETURN 0

     

    --存储过程二

     

    CREATE PROCEDURE InsertOrderDetailsByList

     

        @Id        INT,

     

        @ProductIDList     NVARCHAR(4000) = NULL,

     

        @NumList      NVARCHAR(4000) = NULL,

     

        @PriceList      NVARCHAR(4000) = NULL

     

    AS

     

        SET NOCOUNT ON

     

        DECLARE @Length INT

     

        DECLARE @FirstProductIdWord NVARCHAR(4000)

     

        DECLARE @FirstNumWord NVARCHAR(4000)

     

        DECLARE @FirstPriceWord NVARCHAR(4000)

     

        DECLARE @ProductId INT

    文章录入:admin    责任编辑:admin 
  • 上一个文章:

  • 下一个文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 关于我们 | 友情链接 | 版权申明 |