0

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.

警告が何を言っているのかは理解していますが、これを別の方法で行う方法がよくわかりません。

これをリファクタリングしてその警告を削除するにはどうすればよいですか (そしておそらく少しきれいに読むことができますか)?

4

2 に答える 2

4
UPDATE dbo.[MyTable] 
  SET [SSNWithDashes] = CASE
  WHEN LEN(SSN) = 9 THEN 
    LEFT([SSN],3) + '-' + SUBSTRING([SSN],4,2) + '-' + RIGHT([SSN],4) 
  ELSE NULL
END;
于 2012-08-29T00:26:52.593 に答える
1

SSNWithDashesあなたがすでにNULLその時であると仮定すると

UPDATE dbo.[MyTable] 
  SET [SSNWithDashes]  = LEFT([SSN],3) + '-' + SUBSTRING([SSN],4,2) + '-' + RIGHT([SSN],4) 
WHERE LEN(SSN) = 9

1 行おきに残りますNULL

于 2012-08-29T00:31:21.120 に答える