Ich habe diesen Code:aktualisiert eine SQL Server-Tabelle aus einer CTE und Case-Anweisung
WITH CTE AS
(
SELECT
LTRIM(RTRIM([EMP_ID])) AS empID
FROM
[SAMPLE].[dbo].[segments]
)
SELECT
(CASE WHEN LEN(LTRIM(RTRIM(EMPID))) = 5
THEN RIGHT(('100' + EMPID), 8)
WHEN LEN(LTRIM(RTRIM(EMPID))) = 6
THEN RIGHT(('10' + EMPID), 8)
WHEN LEN(EMPID) = 7
THEN RIGHT('10' + (LEFT(LTRIM(EMPID), 6)), 8)
ELSE empID
END) EMP_ID
FROM CTE
Was ich tun möchte, ist es, den oben genannten Zustand verwenden, um meine emp_id
Spalt auf die neuen 8-stelligen IDs zu aktualisieren. Das Ausführen des Skripts gibt die IDs jetzt korrekt zurück, ich muss nur die Tabelle aktualisieren.
Ich habe versucht, die folgenden und alle es wurde alle IDs die gleichen
WITH CTE AS
(
SELECT
LTRIM(RTRIM([EMP_ID])) AS empID
FROM
[SAMPLE].[dbo].[segments]
)
UPDATE segments
SET EMP_ID = (case when len(ltrim(rtrim(EMPID))) = 5 then right(('100' + EMPID),8)
when len(ltrim(rtrim(EMPID))) = 6 then right(('10' + EMPID),8)
when len(EMPID) = 7 then right('10'+(left(ltrim(EMPID),6)),8)
else empID
end)
FROM CTE
Was die für diese richtige UPDATE
Anweisung zu verwenden ist tat gemacht?
Warum nicht nur einfaches Update verwenden versuchen? Warum der CTE? – Eric
Enthalten irgendwelche EmpIDs nicht-numerische Zeichen? –
Oh, und wenn Sie bereits überprüft haben, die Länge einer Zeichenfolge ist 5 Zeichen und Sie vor 3, _Sie müssen die Zeichenfolge nicht wieder auf 8 zurückschneiden_. Gleich für 6 und 2. –