1

我有一个非常特殊的问题,考虑这两行:

val   | text     | akr       | usr_bk      
-----------------------------------------------
001   | hello    | 1024      | admin
001   | hello    | 1024      | admin

如您所见,我没有唯一的列或其他标识符。

但; 是否有可能(以及如何)只更新一行,例如val = 002 修改另一行?

我在 SQL Server 2008 上运行。

4

1 回答 1

4

您将需要知道您想要哪一个,但是您可以使用您提供的示例数据这样做:

;WITH NumberedTbl AS (
  SELECT ROW_NUMBER() OVER (
    PARTITION BY val, text, akr, admin
    ORDER BY val, text, akr, admin
  ) AS RowNumber,
  val, text, akr, admin
  FROM tbl
)

UPDATE t
SET val = '002'
FROM NumberedTbl t
WHERE t.RowNumber = 1

SELECT * FROM tbl

请参阅此SqlFiddle 以获取实时示例。您可能想要做的是构建并设置它,以便您WITH像这样过滤表:

;WITH NumberedTbl AS (
  SELECT ROW_NUMBER() OVER (
    PARTITION BY val, text, akr, admin
    ORDER BY val, text, akr, admin
  ) AS RowNumber,
  val, text, akr, admin
  FROM tbl
  WHERE ... -- ADD SOME WHERE CLAUSE HERE
)
于 2013-03-20T15:33:28.437 回答