insert into表itemno自动添加,该如何处理
insert into表itemno自动添加
SQL2000, billid相同时,在原表itemno里面加入顺序号
原表 mnf_mrpprogramdetail
billid,itemno,materialid,billtype,remark
1001 , 1 , 203 ,'' ,''
1001 , 2 , 208 ,'' ,''
1001 , 3 , 301 ,'' ,''
1003 , 1 , 332 ,'' ,''
1003 , 2 , 337 ,'' ,''
表Mnf_prdpf (注:这个表的数据只是临时数据,随时会清空的)
referbillid,referitemno,materialid,billtype,remark
1001 , 1 , 901 ,'' ,''
1001 , 2 , 902 ,'' ,''
1001 , 3 , 903 ,'' ,''
1003 , 7 , 339 ,'' ,''
1003 , 8 , 338 ,'' ,''
要求结果 UPDATE
原表 mnf_mrpprogramdetail
billid,itemno,materialid,billtype,remark
1001 , 1 , 203 ,'' ,''
1001 , 2 , 208 ,'' ,''
1001 , 3 , 301 ,'' ,''
1001 , 4 , 901 ,'' ,''
1001 , 5 , 902 ,'' ,''
1001 , 6 , 903 ,'' ,''
1003 , 1 , 332 ,'' ,''
1003 , 2 , 337 ,'' ,''
1003 , 3 , 339 ,'' ,''
1003 , 4 , 338 ,'' ,''
------解决方案--------------------
操作前先备份一下,以免出问题
SQL2000, billid相同时,在原表itemno里面加入顺序号
原表 mnf_mrpprogramdetail
billid,itemno,materialid,billtype,remark
1001 , 1 , 203 ,'' ,''
1001 , 2 , 208 ,'' ,''
1001 , 3 , 301 ,'' ,''
1003 , 1 , 332 ,'' ,''
1003 , 2 , 337 ,'' ,''
表Mnf_prdpf (注:这个表的数据只是临时数据,随时会清空的)
referbillid,referitemno,materialid,billtype,remark
1001 , 1 , 901 ,'' ,''
1001 , 2 , 902 ,'' ,''
1001 , 3 , 903 ,'' ,''
1003 , 7 , 339 ,'' ,''
1003 , 8 , 338 ,'' ,''
要求结果 UPDATE
原表 mnf_mrpprogramdetail
billid,itemno,materialid,billtype,remark
1001 , 1 , 203 ,'' ,''
1001 , 2 , 208 ,'' ,''
1001 , 3 , 301 ,'' ,''
1001 , 4 , 901 ,'' ,''
1001 , 5 , 902 ,'' ,''
1001 , 6 , 903 ,'' ,''
1003 , 1 , 332 ,'' ,''
1003 , 2 , 337 ,'' ,''
1003 , 3 , 339 ,'' ,''
1003 , 4 , 338 ,'' ,''
------解决方案--------------------
操作前先备份一下,以免出问题
----------------------------------------------------------------
-- Author :DBA_Huangzj(發糞塗牆)
-- Date :2014-01-14 10:15:03
-- Version:
-- Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)
-- Dec 28 2012 20:23:12
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[mnf_mrpprogramdetail]
if object_id('[mnf_mrpprogramdetail]') is not null drop table [mnf_mrpprogramdetail]
go
create table [mnf_mrpprogramdetail]([billid] int,[itemno] int,[materialid] int,[billtype] varchar(1),[remark] varchar(1))
insert [mnf_mrpprogramdetail]
select 1001,1,203,'','' union all
select 1001,2,208,'','' union all
select 1001,3,301,'','' union all
select 1003,1,332,'','' union all
select 1003,2,337,'',''
--> 测试数据:[Mnf_prdpf]
if object_id('[Mnf_prdpf]') is not null drop table [Mnf_prdpf]
go
create table [Mnf_prdpf]([referbillid] int,[referitemno] int,[materialid] int,[billtype] varchar(1),[remark] varchar(1))
insert [Mnf_prdpf]
select 1001,1,901,'','' union ALL
select 1001,2,902,'','' union all
select 1001,3,903,'','' union all
select 1003,7,339,'','' union all
select 1003,8,338,'',''
--------------开始查询--------------------------
IF OBJECT_ID('tempdb..#t','u')IS NOT NULL
DROP TABLE #t
go
IF OBJECT_ID('tempdb..#t2','u')IS NOT NULL
DROP TABLE #t2
go
SELECT billid,itemno,materialid,billtype,remark INTO #t
FROM (
select * from [mnf_mrpprogramdetail]
UNION ALL
SELECT * FROM [Mnf_prdpf] )a
SELECT billid,(SELECT COUNT(1) FROM #t b WHERE a.billid=b.billid AND a.itemno>b.itemno)+1 itemno,materialid,billtype,remark INTO #t2
FROM #t a
ORDER BY billid,itemno
--更新已有的
UPDATE [mnf_mrpprogramdetail]
SET [mnf_mrpprogramdetail].itemno=b.itemno
FROM #t2 b
WHERE [mnf_mrpprogramdetail].billid=b.billid AND [mnf_mrpprogramdetail].materialid=b.materialid
--插入新的
INSERT INTO [mnf_mrpprogramdetail]
SELECT * FROM #t2 a
WHERE NOT EXISTS (SELECT 1 FROM [mnf_mrpprogramdetail] b WHERE a.billid=b.billid AND a.materialid=b.materialid
)
SELECT * FROM [mnf_mrpprogramdetail]
----------------结果----------------------------