替换删除以更新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中的记录进行分类有什么好处,都应该适用于选择性更新
在运行这两个查询之后,应该完全更新表