更新记录的空列的第一行条目

时间:2012-05-26 06:52:34

标签: sql sql-server-ce

我有一个包含UserIdEmailMobile列的表格。 Email没有空值,但mobile的空值分散在表格的不同行中。

我想用唯一mobile更新每个空mobile的第一行。我希望这可行,但不确定。

UPDATE       userprofileplus
SET                mobile = 9199225533
WHERE        (UserId IN
                             (SELECT        TOP (1) UserId
                               FROM            userprofileplus AS userprofileplus_1
                               WHERE        (mobile IS NULL) AND (UserId = 5)))

我的目的是防止用户在表上有不必要的空值。我观察到的一个问题是SQL Server Compact Edition 不支持 TOP关键字。我该如何解决这个问题?

SQL Server CE版本为4.0。我还注意到WebMatrix完全支持TOP关键字,但VS 2010 SP1拒绝SQL Server CE 4上的TOP关键字支持。具体怎么回事?当在webmatrix中运行时,所有具有null mobile的记录都会被更新而忽略TOP条件。我只需要更新第一行而不是全部更新。我也尝试过这个。相同的结果

UPDATE       userprofileplus
SET                mobile = 9199225533
WHERE        (UserId IN
                             (SELECT        UserId
                               FROM            userprofileplus AS userprofileplus_1
                               WHERE        (mobile IS NULL) AND (UserId = 5) order by userid offset 1 rows))

有人,请救我。

1 个答案:

答案 0 :(得分:0)

P !! ......我经过几次合理的潜水后终于得到了它。

UPDATE       userprofileplus
SET                mobile = 9199225533
WHERE        (mobile is null and userid = 5) and (Id IN
                             (SELECT        TOP (1) Id
                               FROM            userprofileplus AS userprofileplus_1
                               WHERE        (mobile IS NULL) AND (UserId = 5)))

我必须使用我的主键列作为枢轴,以确保从子查询返回单行,即使我使用的是TOP条件。 但我仍然很好奇为什么VS2010 sqlCE 4.0不支持TOP关键字,但webmatrix也支持。还有,为什么所有列都在其他查询中使用TOP关键字后才更新?