27,579
社区成员
发帖
与我相关
我的任务
分享
--问题描述:
--OrderMaster是主表,OrderDetail隶属于OrderMaster 通过BillNo主键进行关联
--需求:OrderMark是一个模板,如何将模板中的数据插入到OrderDetail
--想得到的结果
--批次插入明细表,因为数据量大 ,RowId不是自增类型
/*BillNo RowId Cu_No Cu_name
001 1 1.1 合同
001 2 1.2 比价表
002 1 1.1 合同
002 2 1.2 比价表
003 1 1.1 合同
003 2 1.2 比价表
*/
--创建主表
Create table OrderMaster (BillNo varchar(20) Primary key)
INSERT INTO OrderMaster
SELECT '001' UNION ALL
SELECT '002' UNION ALL
SELECT '003'
--明细表
CREATE table OrderDetail (BillNo varchar(20),RowId int,CU_No varchar(20),Cu_Name varchar(20),primary key(BillNo,RowId))
--创建模板表
CREATE table OrderMark(CU_No varchar(20),Cu_Name varchar(20))
INSERT INTO Ordermark
SELECT '1.1','合同' UNION ALL
SELECT '1.2','比价表' UNION ALL
INSERT INTO OrderDetail
SELECT BillNo,
ROW_NUMBER() OVER ( PARTITION BY BillNo ORDER BY CU_No ) AS RowId,
CU_No,
Cu_Name
FROM dbo.OrderMaster
CROSS APPLY dbo.OrderMark
ORDER BY BillNo
SELECT * FROM OrderDetail
SELECT a.BillNo,ROW_NUMBER() OVER (PARTITION BY a.BillNo ORDER BY b.Cu_No) AS RowId,b.CU_No,b.Cu_Name
FROM OrderMaster a
CROSS JOIN OrderMark b
BillNo RowId CU_No Cu_Name
-------------------- -------------------- -------------------- --------------------
001 1 1.1 合同
001 2 1.2 比价表
002 1 1.1 合同
002 2 1.2 比价表
003 1 1.1 合同
003 2 1.2 比价表
如果要分批次LZ可以针对OrderMaster 限制每次取1000个billno来处理这样