2017-04-18 88 views
0

您好我有1张大桌子和我做2小表是这样的:替换删除用于更新MS SQL

TABLE BIG 

NAME SURNAME Id_columnX 
tata grgr    
moto hjjj    
oto  kono    
majs grgsgr  35666  
msdfo hjgfjj  27166  
odato kogsno  21899 


TABLE 1 

NAME SURNAME Id_columnX NAME2 
tata grgr    gtata 
moto hjjj    hmoto 
oto kono    koto 


TABLE 2 

NAME SURNAME Id_columnX NAME2 
majs grgsgr  35666  grmajs 
msdfo hjgfjj  27166  hjmsdfo 
odato kogsno  21899  koodato 

,我做剧本超过2小表是这样的:

TABLE 1 

DELETE FROM TABLE1 
WHERE Id_columnX LIKE '_%' 

Update TABLE1 
    set NAME = RIGHT(CONCAT(REPLICATE('0', 6), (NAME)), 6) 
    where LEN(+ RTRIM (NAME)) < 6; 

UPDATE [dbo].[TABLE1] 
SET [NAME2] = LEFT([SURNAME], 2) + [NAME] 

UPDATE [dbo].[TABLE1] 
SET [NAME2]=LOWER(LEFT([NAME2],1))+LOWER(SUBSTRING([NAME2],2,LEN([NAME2]))) 




TABLE 2 

DELETE FROM TABLE2 
WHERE Id_columnX NOT LIKE '_%' 

Update [dbo].[TABLE2] 
    set NAME = RIGHT(CONCAT(REPLICATE('0', 7), (NAME)), 7) 
    where LEN(+ RTRIM (NAME)) < 7; 

UPDATE [dbo].[TABLE2] 
SET [NAME2] = LEFT([SURNAME], 1) + [NAME] 

UPDATE [dbo].[TABLE2] 
SET [NAME2]=LOWER(LEFT([NAME2],1))+LOWER(SUBSTRING([NAME2],2,LEN([NAME2]))) 

我的问题是:我怎么能得到这个:

TABLE BIG 


NAME SURNAME Id_columnX NAME2 
tata grgr     gtata 
moto hjjj     hmoto 
oto  kono     koto 
majs grgsgr  35666  grmajs 
msdfo hjgfjj  27166  hjmsdfo 
odato kogsno  21899  koodato 

我不想分裂大表2小表,然后设置设置NAME 2来自DELETE的东西......我不知道我能用什么:如果更新?

感谢您的意见。

回答

0
;WITH TABLE_BIG(NAME,SURNAME,Id_columnX) 
AS 
(
SELECT 'tata' , 'grgr' ,  NULL UNION ALL 
SELECT 'moto' , 'hjjj' ,  NULL UNION ALL 
SELECT 'oto' , 'kono' ,  NULL UNION ALL 
SELECT 'majs' , 'grgsgr' ,  35666 UNION ALL 
SELECT 'msdfo' , 'hjgfjj' ,  27166 UNION ALL 
SELECT 'odato' , 'kogsno' ,  21899 
) 
,TABLE1(NAME,SURNAME,Id_columnX, NAME2) 
As 
(
SELECT 'tata' , 'grgr' ,NULL, 'gtata' UNION ALL 
SELECT 'moto' , 'hjjj' ,NULL, 'hmoto' UNION ALL 
SELECT 'oto' , 'kono' ,NULL, 'koto' 
) 
,TABLE2(NAME,SURNAME,Id_columnX,NAME2) 
AS 
(
SELECT 'majs' , 'grgsgr',35666 ,'grmajs' UNION ALL 
SELECT 'msdfo' , 'hjgfjj',27166 ,'hjmsdfo' UNION ALL 
SELECT 'odato' , 'kogsno',21899 ,'koodato' 
) 
,Final AS (
     SELECT SURNAME,NAME2 FROM TABLE1  
     UNION ALL  
     SELECT SURNAME,NAME2 FROM TABLE2 
     ) 

SELECT NAME ,SURNAME,Id_columnX ,NAME2 
FROM (
    SELECT B.NAME 
     ,b.Id_columnX 
     ,f.SURNAME 
     ,f.NAME2 
    FROM Final F 
    INNER JOIN TABLE_BIG B ON b.SURNAME = f.SURNAME 
    ) AS Dt 
0

就包括在WHERE子句中的所有必要条件,当你更新,像这样:

UPDATE [Big] 
SET name = RIGHT(CONCAT(REPLICATE('0', 6), (name)), 6) 
    WHERE Id_columnX NOT LIKE '_%' AND LEN(RTRIM(name)) < 6; 

然后

UPDATE [Big] 
SET name = RIGHT(CONCAT(REPLICATE('0', 7), (name)), 7) 
    WHERE Id_columnX LIKE '_%' AND LEN(RTRIM(name)) < 7; 

我不知道情况是否应该在哪里Id_columnX (NOT)LIKE'_%'或WHERE Id_columnX IS(NOT)NULL。无论如何分类表1和2中的记录都应该适用于选择性更新。

运行这两个查询后,表应该完全更新。