Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 是否可以重构此语句以删除子查询?_Tsql_Sql Server 2005 - Fatal编程技术网

Tsql 是否可以重构此语句以删除子查询?

Tsql 是否可以重构此语句以删除子查询?,tsql,sql-server-2005,Tsql,Sql Server 2005,我正试图从一列中获取数据,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 ) + '-

我正试图从一列中获取数据,
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
当这起作用时,它会抛出一个错误:

子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时。

虽然我确实理解这个警告所说的,但我真的不知道如何以不同的方式来处理这个问题


我如何重构此文件以删除该警告(或者读得更干净一些)?

假设您的
SSNWithDashes
已为
NULL

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

假设您的
SSNWithDashes
已为
NULL
,则每隔一行保持
NULL

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

每隔一行保持
NULL

您的第一行是有价值的免责声明。因为如果SSNWithDashes现在对于LEN(SSN)不是9的任何行具有任何无效数据,那么这些行将保持这种方式。如果你知道数据的性质,这绝对是一个好方法,但如果你不知道,这并不是最安全的方法。我同意你的看法,“安全”这个词就是“安全”。我的回答基于“如果MyTable.SSN没有精确的9位数字,我根本不想处理它。”在OP的问题中,您的第一行是一个有价值的免责声明。因为如果SSNWithDashes现在对于LEN(SSN)不是9的任何行具有任何无效数据,那么这些行将保持这种方式。如果你知道数据的性质,这绝对是一个好方法,但如果你不知道,这并不是最安全的方法。我同意你的看法,“安全”这个词就是“安全”。在OP的问题中,我的回答基于“如果MyTable.SSN没有精确的9位数字,我根本不想处理它。”