sql數據維護

昨天項目主管對我說需要對現行某個表的數據進行維護﹐原因是以前并沒有限制激活的唯一性。而如今需要﹐但先前的數據也不能刪除﹐沒有辦法﹐只有交給我們去幫用戶維護了。
好﹐不多說﹐先將表結構的腳本貼出﹕
 1ExpandedBlockStart.gifContractedBlock.gif/**//****** Object:  Table [dbo].[SP_MAT_RATE_MST]    Script Date: 2006/6/6 上午 10:23:05 ******/
 2None.gifif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SP_MAT_RATE_MST]'and OBJECTPROPERTY(id, N'IsUserTable'= 1)
 3None.gifdrop table [dbo].[SP_MAT_RATE_MST]
 4None.gifGO
 5None.gif
 6ExpandedBlockStart.gifContractedBlock.gif/**//****** Object:  Table [dbo].[SP_MAT_RATE_MST]    Script Date: 2006/6/6 上午 10:23:05 ******/
 7None.gifCREATE TABLE [dbo].[SP_MAT_RATE_MST] (
 8None.gif    [MAT_RATE_NO] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
 9None.gif    [VERSION] [int] NOT NULL ,
10None.gif    [PROD_NO] [varchar] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
11None.gif    [CUST_NO] [varchar] (4) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
12None.gif    [CUST_STYLE] [varchar] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
13None.gif    [MAT_OPERATOR] [nvarchar] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
14None.gif    [FIRST_DATE] [datetime] NULL ,
15None.gif    [FINAL_DATE] [datetime] NULL ,
16None.gif    [REMARK] [varchar] (100) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
17None.gif    [CREATE_DATE] [datetime] NULL ,
18None.gif    [CREATE_BY] [nvarchar] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
19None.gif    [UPDATE_DATE] [datetime] NULL ,
20None.gif    [UPDATE_BY] [nvarchar] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
21None.gif    [APPROVE_DATE] [datetime] NULL ,
22None.gif    [APPROVE_BY] [nvarchar] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
23None.gif    [BOM_LEVEL] [varchar] (1) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
24None.gif    [MAIN_COLOR] [varchar] (500) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
25None.gif    [ACTIVE] [bit] NULL ,
26None.gif    [APPROVE_B4] [bit] NULL ,
27None.gif    [SIZE_GROUP] [varchar] (500) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
28None.gif    [SAMPLE_NO] [varchar] (8) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
29None.gif    [MFT_NO] [varchar] (8) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
30None.gif    [TYPE_NO] [varchar] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
31None.gif    [ACTIVE_B] [bit] NULL 
32None.gifON [PRIMARY]
33None.gifGO
34None.gif
35None.gifALTER TABLE [dbo].[SP_MAT_RATE_MST] ADD 
36None.gif    CONSTRAINT [DF_SP_MAT_RATE_MST_MAT_RATE_NO] DEFAULT (0FOR [MAT_RATE_NO],
37None.gif    CONSTRAINT [DF_SP_MAT_RATE_MST_ACTIVE] DEFAULT (0FOR [ACTIVE],
38None.gif    CONSTRAINT [DF_SP_MAT_RATE_MST_APPROVE_B4] DEFAULT (0FOR [APPROVE_B4],
39None.gif    CONSTRAINT [DF_SP_MAT_RATE_MST_ACTIVE_B] DEFAULT (0FOR [ACTIVE_B],
40None.gif    CONSTRAINT [PK_SP_MAT_RATE_MST] PRIMARY KEY  CLUSTERED 
41None.gif    (
42None.gif        [MAT_RATE_NO],
43None.gif        [VERSION],
44None.gif        [PROD_NO]
45None.gif    )  ON [PRIMARY] ,
46None.gif    CONSTRAINT [IX_SP_MAT_RATE_MST] UNIQUE  NONCLUSTERED 
47None.gif    (
48None.gif        [VERSION],
49None.gif        [PROD_NO]
50None.gif    )  ON [PRIMARY] ,
51None.gif    CONSTRAINT [IX_SP_MAT_RATE_MST_1] UNIQUE  NONCLUSTERED 
52None.gif    (
53None.gif        [MAT_RATE_NO],
54None.gif        [VERSION]
55None.gif    )  ON [PRIMARY] 
56None.gifGO
57None.gif
58None.gif
以下是從表
 1ExpandedBlockStart.gifContractedBlock.gif/**//****** Object:  Table [dbo].[SP_MAT_RATE_DTL]    Script Date: 2006/6/6 上午 10:29:27 ******/
 2None.gifif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SP_MAT_RATE_DTL]'and OBJECTPROPERTY(id, N'IsUserTable'= 1)
 3None.gifdrop table [dbo].[SP_MAT_RATE_DTL]
 4None.gifGO
 5None.gif
 6ExpandedBlockStart.gifContractedBlock.gif/**//****** Object:  Table [dbo].[SP_MAT_RATE_DTL]    Script Date: 2006/6/6 上午 10:29:32 ******/
 7None.gifCREATE TABLE [dbo].[SP_MAT_RATE_DTL] (
 8None.gif    [MAT_RATE_NO] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
 9None.gif    [VERSION] [int] NOT NULL ,
10None.gif    [MAT_TYPE] [varchar] (50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
11None.gif    [MAT_NO] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
12None.gif    [MAT_STYLE] [varchar] (50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
13None.gif    [MAT_SUPPLIER] [varchar] (50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
14None.gif    [CURRENCY_NO] [varchar] (5) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
15None.gif    [MAT_UNIT_PRICE] [numeric](182NULL ,
16None.gif    [UNIT_NO] [varchar] (8) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
17None.gif    [MAT_APPLY] [varchar] (70) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
18None.gif    [APPLY_DESC] [varchar] (100) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
19None.gif    [MAT_EXP_RATE] [numeric](182NULL ,
20None.gif    [MAT_QTY] [text] COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
21None.gif    [COLOR_APPLY] [text] COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
22None.gif    [CREATE_DATE] [datetime] NULL ,
23None.gif    [CREATE_BY] [nvarchar] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
24None.gif    [UPDATE_DATE] [datetime] NULL ,
25None.gif    [UPDATE_BY] [nvarchar] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
26None.gif    [BOM_UNIT_NO] [varchar] (8) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
27None.gif    [ALT_FLAG] [bit] NULL ,
28None.gif    [PRICE] [text] COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
29None.gif    [PRICE_TYPE] [int] NULL ,
30None.gif    [MAT_STYLEx] [varchar] (50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL 
31None.gifON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
32None.gifGO
33None.gif
34None.gifALTER TABLE [dbo].[SP_MAT_RATE_DTL] ADD 
35None.gif    CONSTRAINT [DF_SP_MAT_RATE_DTL_PRICE_TYPE] DEFAULT (1FOR [PRICE_TYPE],
36None.gif    CONSTRAINT [PK_SP_MAT_RATE_DTL] PRIMARY KEY  CLUSTERED 
37None.gif    (
38None.gif        [MAT_RATE_NO],
39None.gif        [VERSION],
40None.gif        [MAT_NO],
41None.gif        [MAT_APPLY]
42None.gif    )  ON [PRIMARY] 
43None.gifGO
44None.gif
45None.gif

實際上我們需要的是將主表的ACTIVE字段變為唯一的True,當然是在同一MAT_RATE_NO下。

解決的代碼如下﹕

 1None.gif
 2None.gif
 3None.gif--保留
 4None.gifSelect   MAT_RATE_NO,PROD_NO,Max(UPDATE_DATE)  As UPDATE_DATE  Into #AA    From SP_MAT_RATE_MST B  Where  -- A.MAT_RATE_NO=B.MAT_RATE_NO and A.PROD_NO=B.PROD_NO and 
 5None.gif
 6None.gif B.ACTIVE=1 Group By B. MAT_RATE_NO,B.PROD_NO  Having Count(*)>1
 7None.gif
 8None.gif
 9None.gif--更新
10None.gifUpdate A Set ACTIVE =0 
11None.gif
12None.gif  From SP_MAT_RATE_MST A where   Not   Exists(Select * From #AA B  Where   A.MAT_RATE_NO=B.MAT_RATE_NO And A.PROD_NO=B.PROD_NO And A.UPDATE_DATE=B.UPDATE_DATE) And
13None.gif
14None.gif Exists(Select   MAT_RATE_NO,PROD_NO   From SP_MAT_RATE_MST C   Where  A.MAT_RATE_NO=C.MAT_RATE_NO And A.PROD_NO=C.PROD_NO And 
15None.gif 
16None.gifC.ACTIVE=1 Group By C. MAT_RATE_NO,C.PROD_NO  Having Count(*)>1
17None.gif
18None.gif )
19None.gif
20None.gifDrop Table #AA

可能會有更好的解決方案﹐請不吝賜教﹗

转载于:https://www.cnblogs.com/jinliangliu/archive/2006/06/06/418468.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值