我正在尝试删除以空格开头的姓氏中的第一个字符。下面的代码似乎完全清除姓氏,使该字段为空。你看错了吗?
DECLARE @Id int
DECLARE @LastName NVARCHAR(255)
while (SELECT COUNT(*) FROM [Table] WHERE LastName LIKE ' %') > 0
Begin
Select Top 1 @Id = Id, @LastName = LastName FROM [Table] WHERE LastName LIKE ' %'
UPDATE [Table] SET LastName = SUBSTRING(@LastName, 1, LEN(@LastName)) WHERE Id = @Id
End
答案 0 :(得分:3)
对我而言,您发布的代码在无限循环中运行。
LastName = SUBSTRING(LastName, 1, LEN(LastName))
除了删除右尾随空格(因为LEN
不计算)之外没有任何效果。要删除最左侧的字符,您需要SUBSTRING(LastName, 2, LEN(LastName) - 1)
。
但是,你不需要RBAR(Row By Agonizing Row)循环,只需使用
UPDATE [Table]
SET LastName = LTRIM(LastName)
WHERE LastName LIKE ' %'
以基于集合的方式更新所有匹配的行。
答案 1 :(得分:0)
我不太明白为什么你在SELECT语句中使用LIKE'°%'语句,同时限制。 接下来,你应该避免在循环中执行查询,因为这会严重损害性能。
SQL是基于集合设置的,因此完全可以在不使用循环的情况下执行此代码。
UPDATE [Table]
SET LastName = LTRIM(LastName)
WHERE LastName LIKE ' %'