嗨我有一张大桌子,我做了两张小桌子:
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个小表分割大表,然后设置来自DELETE的NAME2集......我不知道我能用什么:如果更新?
感谢您的意见。
答案 0 :(得分: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
答案 1 :(得分:0)
在UPDATE时,只需在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;
我不确定条件是否应该是WHERE Id_columnX(NOT)LIKE'_%'或WHERE Id_columnX IS(NOT)NULL。无论如何对表1和表2中的记录进行分类都应该适用于选择性更新。
运行两个查询后,表格应该完全更新。