• 使用游标进行循环数据插入


    建表语句:

    代码
    USE test
    GO

    IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'Orders')
        
    DROP TABLE Orders
        
    IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'Customers')
        
    DROP TABLE Customers
        
    /*
        Customer 1 --> n Order
    */

    -- Create Customer Table
    CREATE TABLE Customers
    (
        CustomerId 
    UNIQUEIDENTIFIER PRIMARY KEY,
        Name 
    VARCHAR(25),
    )
    GO


    -- Create Order Table
    CREATE TABLE Orders
    (
        OrderId 
    UNIQUEIDENTIFIER PRIMARY KEY,
        Name 
    VARCHAR(255),
        Customer_Id 
    UNIQUEIDENTIFIER FOREIGN KEY REFERENCES Customers(CustomerId)
    )
    GO


    -- Create Order History Table
    IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OrderHistory')
        
    DROP TABLE OrderHistory

    CREATE TABLE OrderHistory
    (
        OrderHistoryId 
    UNIQUEIDENTIFIER PRIMARY KEY DEFAULT(NEWID()),
        CustomerName 
    VARCHAR(25),
        OrderName 
    VARCHAR(255)
    )
    GO

    插入数据的存储过程:

    CREATE PROCEDURE spAddOrderHistory
    (
        
    @CustomerName VARCHAR(25),
        
    @OrderName VARCHAR(255)
    )
    AS
    BEGIN
        
    INSERT INTO OrderHistory(CustomerName,OrderName)
        
    VALUES(@CustomerName@OrderName)
    END

    使用游标进行数据插入:

    代码
    -- use cursor to insert data into order history table

    DECLARE @customer_name VARCHAR(25)
    DECLARE @order_name VARCHAR(255)

    DECLARE curOrder CURSOR READ_ONLY
    FOR
    SELECT c.Name as [Customer Name], o.Name as [Order Name]
    FROM Customers c INNER JOIN Orders o
        
    ON c.CustomerId = o.Customer_Id
    ORDER BY [Customer Name][Order Name]

    OPEN curOrder

    FETCH NEXT FROM curOrder
    INTO @customer_name@order_name

    WHILE @@FETCH_STATUS = 0    
    BEGIN
        
    EXEC spAddOrderHistory @customer_name@order_name 
               
        
    FETCH NEXT FROM curOrder INTO @customer_name@order_name
    END

    CLOSE curOrder
    DEALLOCATE curOrder

    运行结果:

    C2 O2 by C2
    C1 O3 by C1
    C2 O4 by C2
    C1 O1 by C1
    C1 O5 by C1
    C2 O6 by C2

  • 相关阅读:
    UVALive-8077 Brick Walls 找规律
    UVALive-8079 Making a Team 排列组合公式化简
    UVALive-8072 Keeping On Track 树形dp 联通块之间缺失边的个数
    HDU-5534 Partial Tree 完全背包 设定初始选择
    HDU-2844 Coins 多重背包 物品数量二进制优化
    CodeForces-366C Dima and Salad 对01背包的理解 多个背包问题
    HDU-2955 Robberies 浮点数01背包 自变量和因变量位置互换
    UVALive-7197 Axles 动态规划 多个背包问题
    广义表(C++实现)
    稀疏矩阵及稀疏矩阵的压缩存储
  • 原文地址:https://www.cnblogs.com/davidgu/p/1737426.html
Copyright © 2020-2023  润新知