我试图从一列中取数据,MyTable.SSN
,并将其复制到另一个表中,MyTable.SSNWithDashes
,只是格式不同。如果MyTable.SSN
没有正好9位数字,我根本不在乎处理它。是否有可能重构此语句以删除子查询?
我已经试过这样:
IF(SELECT LEN([SSN]) FROM [MyTable]) = 9
UPDATE [MyTable] SET [SSNWithDashes] = LEFT([SSN], 3) + '-' + SUBSTRING([SSN], 4, 2) + '-' + RIGHT([SSN], 4)
ELSE
UPDATE [MyTable] SET [SSNWithDashes] = NULL
虽然这个工作,它抛出一个错误:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
虽然我不明白什么是警告说,我不是真的肯定如何去做这个不同的事情。
我该如何重构此删除该警告(也许读一点清洁剂)?
你的第一行是一个有价值的免责声明。因为如果SSNWithDashes现在对于LEN(SSN)不是9的任何行都有任何无效数据,那些行将保持这种状态。如果你知道数据的性质,绝对是一个好方法,但如果你不知道数据的性质,那么最好不要。 –
我同意你的意思,“安全”就是这个词。我回答基于_“如果MyTable.SSN没有9位数字,我根本不在意它的处理。”_在OP的问题中 – codingbiz