现在有2条完全相同的记录,但是我只想UPDATE其中的一条。
不想删除数据。
请高手解答
谢谢

解决方案 »

  1.   

    UPDATE A SET
       xx= xx
    FROM tb AS A
    WHERE NOT EXISTS(SELECT * FROM tb 
                     WHERE A.xx=xx AND A.id > id);
      

  2.   

    update top 1 set ........
      

  3.   

    ;WITH Liang AS 
    (
        SELECT * ,rowid=ROW_NUMBER() OVER(PARTITION BY xx ORDER BY id)
        FROM tb
    )
    UPDATE Liang SET
        xx = xx
    WHERE rowid = 1;
      

  4.   

    UPDATE TOP(1) tb SET
       xx=xx
    WHERE xx=xxx
      

  5.   

    set rowcount 1
    update tb set col='x'
    set rowcount 0
      

  6.   


    --正解
    ;WITH Liang AS 
    (
        SELECT * ,rowid=ROW_NUMBER() OVER(PARTITION BY xx ORDER BY id)
        FROM tb
    )
    UPDATE Liang SET
        xx = xx
    WHERE rowid = 1;
      

  7.   

    --借助一个子增列
    alter table tb add id int identity(1,1)
    go
    --更新需要更新的那个
    update tb set col=.... where id=..
    go
    --去掉该子增列
    alter table tb drop column id
      

  8.   

    DECLARE @T TABLE(
    COL1 VARCHAR(10)
    )
    INSERT INTO @T
    SELECT 'A' UNION ALL
    SELECT 'A'
    UPDATE TOP(1) @T SET COL1='B' WHERE COL1='A'
    SELECT * FROM @T/*
    B
    A
    */
      

  9.   

    现在有2条完全相同的记录,但是我只想UPDATE其中的一条。 
    不想删除数据。 
    请高手解答 
    谢谢update a set 字段=?? from 
            (select top 1 字段 from 表 group by 字段 having count(*)>1) a
      

  10.   

    create table test_top(id int, name varchar(10))
    insert into test_top
    select '1','aa' union all
    select '1','aa'
    1种
    set rowcount 1
    update test_top set name='tt'
    set rowcount 02种
    ;with ttttt as 
    (
    select * , row = row_number() over (order by id ) from test_top
    )
    update ttttt set name='x' where row =1
      

  11.   

    -- =========================================
    -- -----------t_mac 小编-------------
       ---希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('tb') IS NOT NULL
      DROP TABLE tb
    GO
    CREATE TABLE tb(a int,b int)
    go
    insert into tb
    select 1,2 union all
    select 1,2 
    go
    set rowcount 1
    update tb 
    set a=3,b=5
    where a=1 and b=2
    set rowcount 0
    select  * from tb/*------------
    a           b
    ----------- -----------
    3           5
    1           2-------*/
      

  12.   

    update top (1) tb set col='xxx' where col='yyy'
      

  13.   


    在关键字 'top' 附近有语法错误。
      

  14.   


    注意红字,需要括号:
    update top (1) tb set col='xxx' where col='yyy'
      

  15.   

    依然是:
    在关键字 'top' 附近有语法错误。
      

  16.   


    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: ';' 附近有语法错误。
    服务器: 消息 195,级别 15,状态 1,行 3
    'ROW_NUMBER' 不是可以识别的 函数名。
      

  17.   

    你用的是SQL Server 2000吧?那么 row_number、 update top (1)  等都不能用。建议为表加一个标识列,然后根据标识值进行修改。
      

  18.   

    SQL> select *
      2  from t
      3  ;         A B
    ---------- -----
             1 a
             1 a
             2 c
    SQL> update t
      2  set b='b'
      3  where rowid=(select min(rowid) from t where a=1 and b='a')
      4  ;已更新 1 行。SQL> select *
      2  from t
      3  ;         A B
    ---------- -----
             1 b
             1 a
             2 c
      

  19.   

    update top ()1 在2005中可以嗎?
      

  20.   

    --2005方法 
    -- =========================================
    -- -----------t_mac 小编-------------
       ---希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('tb') IS NOT NULL
      DROP TABLE tb
    GO
    CREATE TABLE tb(a int,b int)
    go
    insert into tb
    select 1,2 union all
    select 1,2 
    goupdate top(1) tb 
    set a=3,b=5
    where a=1 and b=2
    select * from tb (1 行受影响)
    a           b
    ----------- -----------
    3           5
    1           2
    --2000方法
    -- =========================================
    -- -----------t_mac 小编-------------
       ---希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('tb') IS NOT NULL
      DROP TABLE tb
    GO
    CREATE TABLE tb(a int,b int)
    go
    insert into tb
    select 1,2 union all
    select 1,2 
    go
    set rowcount 1
    update tb 
    set a=3,b=5
    where a=1 and b=2
    set rowcount 0
    select  * from tb/*------------
    a           b
    ----------- -----------
    3           5
    1           2-------*/
      

  21.   

    可以 但是你写错了 
    update top(1) 表名
    set .....
      

  22.   

    可以按照数据库rowid来进行更新
    top的用法无法确定哪条记录
      

  23.   

    这种数据本身就有问题。不管删除还是修改用SQL语句都不行。建议重新建表免得引发后患
      

  24.   

    咋会建这样得表呢。
    要是我就是先delete再insert或者就update第一条
      

  25.   


    都说了一模一样的记录,无主健, 这样关系逻辑都无法定位记录。只能用计数控制
    set rowcount 1
    ...
    set rowcount 02005的话,可以 update top 实现。
    否则只能在表上做调整 。
      

  26.   

    SQL2005可用CTE
    http://blog.csdn.net/roy_88/archive/2008/07/26/2715965.aspxSQL2000可用游标处理处理表重复记录(查询和删除)_整理贴4
      

  27.   


    -->生成测试数据:
    if not object_id('tb') is null
      drop table tb
    go
    create table tb(col varchar(10))
    go
    insert tb
    select 'a' union all
    select 'a' union all
    select 'b' union all
    select 'b'
    go
    -->SQL2000查询如下: 
    declare @col varchar(10),@newcol varchar(10)
    update tb set 
        col=@newcol,
        @newcol=case when col=@col then col
                 else 'new-'+col
            end,
        @col=col
    select * from tb
    /*
    col
    ----------
    new-a
    a
    new-b
    b(4 行受影响)
    */
      

  28.   

    -->生成测试数据:
    if not object_id('tb') is null
      drop table tb
    go
    create table tb(col varchar(10))
    go
    insert tb
    select 'a' union all
    select 'a' union all
    select 'a' union all
    select 'b' union all
    select 'b'
    go
    -->SQL2000查询如下: 
    declare @col varchar(10),@newcol varchar(10)
    update tb set 
        col=@newcol,
        @newcol=case when col=@col then col
                 else 'new-'+col
            end,
        @col=col
    select * from tb
    /*
    col
    ----------
    new-a
    a
    a
    new-b
    b(5 行受影响)
    */多条也是只更新第一条.
      

  29.   


    yes 自己增加一列就好了
      

  30.   

    如果楼主用的是微软的数据库(如SQL SERVER、ACCESS)大可以用如下方法解决:
    1、update top 1 table_aa set xx=x
    2、如果是sql server就用企业管理器打开表直接改,如果是access就双击打开直接改。
      

  31.   

    要表中top第一条。然后把这top条的改了就行了。哈哈
      

  32.   


    结果:(5 行受影响)(5 行受影响)(5 行受影响)
    这样影响的行数 是 3 * 记录总数 的量,思路不错,就是效率在大数据量时就差点,2000的话用计数控制 
    set rowcount 1 
    ... 
    set rowcount 0 2005的话,可以 update top 实现 或 使用新增加的 ROW_NUMBER() 类似的排序函数这貌似至少也要遍历一次数据表, 
      

  33.   


    结果:(5 行受影响)(5 行受影响)(5 行受影响)
    这样影响的行数 是 3 * 记录总数 的量,思路不错,就是效率在大数据量时就差点,2000的话用计数控制 
    set rowcount 1 
    ... 
    set rowcount 0 2005的话,可以 update top 实现 或 使用新增加的 ROW_NUMBER() 类似的排序函数这貌似至少也要遍历一次数据表, 
      

  34.   

    如果用的MS2005的话, 用with语句能完成
    如果用的比2005低的话, 不容易, 可以通过导表完成, 也可能Add一个新字段如标识列, 删除后再删除此列
      

  35.   

    对于这个问题咋把SQL中的存储过程拿出来了呀
      

  36.   

    update A set x =xx where rownum<2;
      

  37.   

    手动增加一个自动增长列(auto_id).然后用更新语句:
    update table set ... where auto_id=(select min(auto_id) from table where group by fieldName having(count(fieldName ))>1)