我有一个非常特殊的问题,请考虑这两行:
val | text | akr | usr_bk
-----------------------------------------------
001 | hello | 1024 | admin
001 | hello | 1024 | admin
如您所见,我没有唯一的专栏或其他标识符。
但;是否有可能(以及如何)只更新一个行,例如val = 002
没有修改另一行?
我在SQL Server 2008上运行。
答案 0 :(得分: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 for a live example。您可能想要做的是构建它并进行设置,以便您像这样过滤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
)