1

主キーのないテーブルがあります。

name      age       sex
a         12        m
b         61        m
c         23        f
d         12        m
a         12        m
a         12        m
f         14        f

私は正確に3つの同様の行-行-1、行-5、および行-6を持っています。行 1 と行 6 に影響を与えずに行 5 を更新したい。これを達成する方法を教えてください。

4

4 に答える 4

3

あなたの本当の問題は、行番号がなく、同一の行を区別する方法がないことです。データが挿入された順序のままである場合は、これまでのところ幸運でした。SQL Server は行の順序を保証せず、予告なしに順序をランダム化する可能性があります。順序を保持するために、テーブルに ID 列を追加できます。

ALTER TABLE TableWithNoPrimaryKey
ADD RowNum int IDENTITY(1,1) PRIMARY KEY
于 2012-05-04T09:35:27.590 に答える
1

この重複は数千のレコードに広がる可能性があるため、SQL で ROW_NUMBER 関数を使用することはできません。ROW_NUMBER は OVER 句で行番号を取得するために使用され、そのようなデータのストレージはクラスター化されていないため、削除できません。唯一のオプションは、テーブルにアイデンティティまたは一意の列を追加してから、特別なレコードを削除することです。新しいインデックスまたは新しい列を含むテーブルが必要ない場合は、そのクローンをテーブルから削除できます。

于 2012-05-04T09:31:20.597 に答える
1

あなたが望むようにする方法があります。ただし、お勧めしません。

;WITH cte AS
(
    SELECT *, RowNum = ROW_NUMBER() OVER (ORDER BY GETDATE())
    FROM [table]
)
UPDATE cte
SET age = age + 1
WHERE (RowNum = 5)
AND (name = 'a' AND age = 12 AND sex = 'm');
于 2012-05-04T10:41:02.397 に答える