8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何删除同一行中的重复项

Bense Tony 2月前

62 0

我有一张表,其中列为 columna,并且数据在同一行:columnna-----------------a,b,a,b,a,b,a,b我试过了,但是不好duplicated_rows AS ( SELECT *, ROW_NUM...

我有一张表,其中的列 columna 在同一行中有数据:

columna
-----------------
a,b,a,b,a,b,a,b

我试过了,但效果不好

duplicated_rows AS 
(
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY columna) AS row_num
    FROM 
        tablea
)
SELECT * 
FROM duplicated_rows
WHERE row_num > 1;

不确定如何删除重复项以便获得结果

columna
-------
a,b
帖子版权声明 1、本帖标题:如何删除同一行中的重复项
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Bense Tony在本站《sql-server》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 出现错误。窗口函数和 NEXT VALUE FOR 函数不支持整数索引作为 ORDER BY 子句表达式。

  • 嗯,你的意思是你只有一行,列值以逗号分隔?这可能是问题所在,不要在一列中存储多个项目

  • 我在 SQL Server 捕获实例上运行以下查询:DECLARE @from_lsn binary (10), @to_lsn binary (10) SELECT @from_lsn = sys.fn_cdc_get_min_lsn ('dbo_ABC');SELECT @from_lsn;SE...

    我在 SQL Server 捕获实例上运行以下查询:

    DECLARE @from_lsn binary (10), @to_lsn binary (10)
     
    SELECT @from_lsn = sys.fn_cdc_get_min_lsn ( 'dbo_ABC' );
    SELECT @from_lsn;
    
    SELECT @to_lsn = sys.fn_cdc_get_max_lsn ();
    
    SELECT *
    FROM cdc.fn_cdc_get_all_changes_dbo_ABC(@from_lsn, @to_lsn, 'all');
    

    导致 0x00000000000000000000 返回 @from_lsn 的值 SELECT * 是完全空的行:

    __$start_lsn __$seqval __$操作 __$update_mask 菌柱
    无效的 无效的 无效的 无效的 无效的

    注意:当查询明显不存在的变更捕获表时,不会发生此行为:

    SELECT *
    FROM cdc.fn_cdc_get_all_changes_dbo_blahblahblah(@from_lsn, @to_lsn, 'all');
    

    SQL 错误 [208] [S0002]: 对象名称“cdc.fn_cdc_get_all_changes_dbo_blahblahblah”无效。

    DBA 报告说他们无法使用自己的 ID 复制该问题。

  • 当表已设置为 CDC,但查询用户无权访问该角色,或者在设置 CDC 后该角色已更改时,就会发生这种情况。用户可能保留运行 CDC 函数的权限 fn_cdc_get_all_changes_... ,甚至查询架构中的表 cdc

    要检查角色,请运行以下查询:

    select 
      capture_instance,
      role_name 
    from 
      cdc.change_tables ct
    where 
      capture_instance = 'dbo_ABC'
    order by 
      role_name;
    

    并查找角色名称中的任何差异,这些差异可能指向无法查询捕获实例的原因。

    在我们的案例中,该表已在 UAT 数据库中重新注册为 CDC,并且角色已从 无意中更改 SA_SQLUATRead_CDCRole SA_SQLPrdRead_CDCRole

    使用正确的角色名称重新注册 CDC 表解决了该问题,用户能够再次查询该表。DBA 无法复制该问题,因为他们的权限高于 CDC 查询用户的权限。

  • 不管怎样,在不同的环境中拥有不同的角色/角色名称会导致这种情况。我能想到的两种替代方案是:1) 角色在环境之间是相同的(例如 SA_SQLRead_CDCRole),并且成员资格取决于环境。2) 与 1 相同,只是您将特定于环境的角色(顺便说一句,我仍然建议将其部署到所有环境,无论它们在给定环境中是否具有空成员资格)放在实际用户和 CDC 角色之间。无论哪种方式,它都允许您将环境差异的范围限定为角色成员资格,而不是“谁拥有什么权限?”。

返回
作者最近主题: