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

简介: 建表语句:   代码 USE testGOIF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'Orders')    DROP TABLE Orders    IF EXISTS (SELECT 1 FROM sysobjects WHE...

建表语句:

 

img_405b18b4b6584ae338e0f6ecaf736533.gif 代码
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

 

 

 

使用游标进行数据插入:

 

img_405b18b4b6584ae338e0f6ecaf736533.gif 代码
--  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

 

目录
相关文章
|
4月前
|
存储 SQL Oracle
|
4月前
|
存储 SQL 关系型数据库
⑩⑤【DB】详解MySQL存储过程:变量、游标、存储函数、循环,判断语句、参数传递..
⑩⑤【DB】详解MySQL存储过程:变量、游标、存储函数、循环,判断语句、参数传递..
43 0
|
8月前
|
存储 关系型数据库 MySQL
MySQL存储过程中双层游标嵌套循环实例
MySQL存储过程中双层游标嵌套循环实例
|
10月前
|
存储 Oracle 关系型数据库
MySql存储过程游标循环问题解决过程
MySql存储过程游标循环问题解决过程
143 0
SQL 循环遍历结果集
SQL 循环遍历结果集
182 0
|
索引
按顺序遍历表
按顺序遍历表
99 0
|
Java C语言
练习6—数据插入
练习6—数据插入
|
存储 SQL 数据库
存储过程遍历
达梦数据库存储过程
存储过程遍历
游标的简单例子
游标 不单独存在 是看不到的 declare mycursor 声明游标 cursor for select UserName,Gender fro...
1094 0