替换删除以更新MS SQL

替换删除以更新MS SQL,sql,sql-server,Sql,Sql Server,嗨,我有一张大桌子,我做了两张小桌子,像这样: TABLE BIG NAME SURNAME Id_columnX tata grgr moto hjjj oto kono majs grgsgr 35666 msdfo hjgfjj 27166 odato kogsno 21899 TABLE 1 N

嗨,我有一张大桌子,我做了两张小桌子,像这样:

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
UPDATE [Big]
SET name = RIGHT(CONCAT( REPLICATE('0', 6),  ( name ) ), 6)
    WHERE Id_columnX NOT LIKE '_%' AND LEN(RTRIM(name)) < 6;
我在两张小桌子上做了如下脚本:

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])))
我不想分裂为2个小表大表,然后设置设置名称2,这是从删除的东西来。。。我不知道我能用什么:如果更新


感谢您的意见。

更新时,只需在WHERE子句中包含所有必要的条件,如下所示:

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
;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
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',6),(name)),6)
其中Id_columnX不象“u%”和LEN(RTRIM(name))<6;
然后

UPDATE[Big]
SET name=RIGHT(CONCAT(REPLICATE('0',7),(name)),7)
其中Id_columnX类似于“%”和LEN(RTRIM(name))<7;
我不确定该条件应该是Id_columnX(不)像“u%”的位置还是Id_columnX(不)为NULL的位置。无论对表1和表2中的记录进行分类有什么好处,都应该适用于选择性更新

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