• 循环插入一条数据的sql写法



    DECLARE @i INT
    SET @i = 1
    WHILE @i > 0
    BEGIN

    DECLARE @TransportFormMstID BIGINT;
    DECLARE @TradeOrderID BIGINT;
    DECLARE @TransportFormMstID_T BIGINT;
    DECLARE @DeliveryCode VARCHAR(40);

    SELECT TOP 1
    @TransportFormMstID_T = TransportFormMstID ,
    @TradeOrderID = TradeOrderID ,
    @DeliveryCode = DeliveryCode
    FROM dbo.TWX_TransportFromMst_T WITH ( NOLOCK )
    WHERE DeleteUser = 1;

    IF NOT EXISTS ( SELECT * FROM dbo.TWX_TransportFromMst WITH ( NOLOCK )WHERE DeliveryCode = @DeliveryCode )
    BEGIN

    INSERT INTO dbo.TWX_TransportFromMst
    ( TransportFormMstCode
    )
    SELECT TransportFormMstCode ,
    FROM dbo.TWX_TransportFromMst_T WITH ( NOLOCK )
    WHERE TransportFormMstID = @TransportFormMstID_T

    SELECT @TransportFormMstID = @@IDENTITY;
    END

    ELSE
    BEGIN
    SELECT TOP 1
    @TransportFormMstID = TransportFormMstID
    FROM dbo.TWX_TransportFromMst WITH ( NOLOCK )
    WHERE DeliveryCode = @DeliveryCode;
    END

    PRINT @DeliveryCode + '-正在执行'

    IF NOT EXISTS ( SELECT *
    FROM dbo.TWX_TransportFromDtl WITH ( NOLOCK )
    WHERE TradeOrderID = @TradeOrderID
    AND ProductID IN (
    SELECT ProductID
    FROM dbo.TWX_TransportFromDtl WITH ( NOLOCK )
    WHERE TradeOrderID = @TradeOrderID ) )
    BEGIN
    INSERT INTO dbo.TWX_TransportFromDtl
    ( TradeOrderID ,
    ProductID ,
    ProductCatalogID ,
    ProductCatalogIDPath ,

    TotalItemActualPrice ,
    ItemDetailUrl ,
    TransportFormMstID ,
    ProductMaterial ,
    ProductMaterialEn
    )
    SELECT TradeOrderID ,

    TotalItemActualPrice ,
    ItemDetailUrl ,
    @TransportFormMstID ,
    ProductMaterial ,
    ProductMaterialEn
    FROM dbo.TWX_TransportFromDtl_T WITH ( NOLOCK )
    WHERE TradeOrderID = @TradeOrderID
    AND ProductID IN (
    SELECT ProductID
    FROM dbo.TWX_TransportFromDtl WITH ( NOLOCK )
    WHERE TradeOrderID = @TradeOrderID )

    END
    ELSE
    BEGIN
    UPDATE dbo.TWX_TransportFromDtl
    SET TransportFormMstID = @TransportFormMstID
    WHERE TransportFormDtlID IN (
    SELECT TransportFormDtlID
    FROM dbo.TWX_TransportFromDtl WITH ( NOLOCK )
    WHERE TradeOrderID = @TradeOrderID
    AND ProductID IN (
    SELECT ProductID
    FROM dbo.TWX_TransportFromDtl WITH ( NOLOCK )
    WHERE TradeOrderID = @TradeOrderID ) )

    END

    UPDATE dbo.TWX_TransportFromMst_T
    SET deleteUser = 2
    WHERE TransportFormMstID = @TransportFormMstID_T

    END

    ----------------------------------------比较完整的写法


    DECLARE @i INT
    SET @i = 1
    WHILE @i > 0
    BEGIN

    DECLARE @TransportFormMstID BIGINT;
    DECLARE @TradeOrderID BIGINT;
    DECLARE @TransportFormMstID_T BIGINT;
    DECLARE @DeliveryCode VARCHAR(40);

    SELECT TOP 1
    @TransportFormMstID_T = TransportFormMstID ,
    @TradeOrderID = TradeOrderID ,
    @DeliveryCode = DeliveryCode
    FROM dbo.TWX_TransportFromMst_T WITH ( NOLOCK )
    WHERE DeleteUser = 1;

    IF NOT EXISTS ( SELECT *
    FROM dbo.TWX_TransportFromMst WITH ( NOLOCK )
    WHERE DeliveryCode = @DeliveryCode )
    BEGIN

    INSERT INTO dbo.TWX_TransportFromMst
    ( TransportFormMstCode ,
    TransportFormMstGuid ,
    TransportFormName ,
    ComeFrom
    )
    SELECT TransportFormMstCode ,
    TransportFormMstGuid ,
    TransportFormName ,
    ComeFrom

    FROM dbo.TWX_TransportFromMst_T WITH ( NOLOCK )
    WHERE TransportFormMstID = @TransportFormMstID_T

    SELECT @TransportFormMstID = @@IDENTITY;
    END
    ELSE
    BEGIN
    SELECT TOP 1
    @TransportFormMstID = TransportFormMstID
    FROM dbo.TWX_TransportFromMst WITH ( NOLOCK )
    WHERE DeliveryCode = @DeliveryCode;
    END

    PRINT @DeliveryCode + '-正在执行'

    IF NOT EXISTS ( SELECT *
    FROM dbo.TWX_TransportFromDtl WITH ( NOLOCK )
    WHERE TradeOrderID = @TradeOrderID
    AND ProductID IN (
    SELECT ProductID
    FROM dbo.TWX_TransportFromDtl WITH ( NOLOCK )
    WHERE TradeOrderID = @TradeOrderID ) )
    BEGIN
    INSERT INTO dbo.TWX_TransportFromDtl
    ( TradeOrderID ,
    ProductID ,
    ProductCatalogID
    )
    SELECT TradeOrderID ,
    ProductID ,
    ProductCatalogID ,
    @TransportFormMstID ,
    ProductMaterial ,
    ProductMaterialEn
    FROM dbo.TWX_TransportFromDtl_T WITH ( NOLOCK )
    WHERE TradeOrderID = @TradeOrderID
    AND ProductID IN (
    SELECT ProductID
    FROM dbo.TWX_TransportFromDtl WITH ( NOLOCK )
    WHERE TradeOrderID = @TradeOrderID )

    END
    ELSE
    BEGIN
    UPDATE dbo.TWX_TransportFromDtl
    SET TransportFormMstID = @TransportFormMstID
    WHERE TransportFormDtlID IN (
    SELECT TransportFormDtlID
    FROM dbo.TWX_TransportFromDtl WITH ( NOLOCK )
    WHERE TradeOrderID = @TradeOrderID
    AND ProductID IN (
    SELECT ProductID
    FROM dbo.TWX_TransportFromDtl WITH ( NOLOCK )
    WHERE TradeOrderID = @TradeOrderID ) )

    END

    UPDATE dbo.TWX_TransportFromMst_T
    SET deleteUser = 2
    WHERE TransportFormMstID = @TransportFormMstID_T

    END

  • 相关阅读:
    《STL源码剖析》 stl_multimap.h [转]
    2007元旦粤北山区:英西峰林走廊,小赵州桥
    东师回忆录 之 二舍被拆记
    学生二三事
    2007元旦粤北山区:乳源大峡谷
    元旦粤北骑游计划
    通过配置php来屏蔽PHP错误
    什么是负载平衡
    ORACLE 日期函数大全
    linux 如何运行sh文件
  • 原文地址:https://www.cnblogs.com/chengjun/p/7843050.html
Copyright © 2020-2023  润新知