【发布时间】:2017-10-30 19:11:30
【问题描述】:
我有这个代码:
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
我想要做的是使用上述状态将我的emp_id 列更新为新的 8 位 id。现在运行脚本会正确返回 ID,我只需要更新表格即可。
我尝试了以下方法,它所做的只是使所有 ID 都相同
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
为此使用的正确UPDATE 语句是什么?
【问题讨论】:
-
为什么不直接使用简单的更新呢?为什么是 CTE?
-
是否有任何 EmpID 包含非数字字符?
-
哦,当您已经检查了一个字符串的长度是 5 个字符并在前面添加 3 个字符时,您不需要再次将字符串修剪回 8 个字符。 6 和 2 相同。
标签: sql-server-2012 sql-server-2014 common-table-expression