除了其他回复之外,我怀疑您并不是要替换 char(10) 两次。您可能想要替换char(10) 和char(13):
UPDATE dbo.works
SET nIndex = CONVERT(INT, REPLACE(REPLACE(
strIndex, CHAR(13), ''), CHAR(10), ''));
当然,由于strIndex 是一个字符串,它可能包含除CR/LF 之外的其他字符,因此您可能需要添加WHERE 子句:
WHERE ISNUMERIC(REPLACE(REPLACE(strIndex, CHAR(13), ''), CHAR(10), '')) = 1;
或者您可以在更新中使用CASE 表达式来确保将不兼容的值设置为NULL,例如:
UPDATE dbo.works
SET nIndex = CASE
WHEN ISNUMERIC(REPLACE(REPLACE(strIndex, CHAR(13), ''), CHAR(10), '')) = 1
THEN
CONVERT(INT, REPLACE(REPLACE(
strIndex, CHAR(13), ''), CHAR(10), ''))
ELSE NULL END;
在 SQL Server 2012 中,此逻辑要简单得多,例如TRY_CONVERT().