繁体   English   中英

SQL计数唯一删除集

[英]SQL Count Unique Deleted Sets

我的数据库中目前有一个简单的表,用于存储集合和值。 我希望能够删除数据库中的所有条目,并返回已删除的不同集的数量。

 create table sets(
      SetId varchar(50)
      Value int
 )

如果我有两个带有两个值的集合,那么该表将被加载四个条目。

 Set1, 0
 Set1, 1
 Set2, 0
 Set2, 1

如果我删除所有内容,我希望能够统计删除了多少个唯一的SetId,因此在上面的示例中,它应该返回2。

现在,我可以通过创建一个包含已删除的SetId的tempTable来完成此操作,然后算出

CREATE TABLE #temp
(
    SetId varchar(50)
);

delete from Sets
    OUTPUT DELETED.SetId INTO #temp

select count(distinct SetId) from #temp;

是否有更好的方法来完成此操作而不必使用临时表?

如果您有很多行,并且想避免使用临时表(很多IO):

declare @cnt int;

set xact_abort on
begin transaction

begin try
    select @cnt = count(distinct SetId) from sets;
    delete from sets;    
    commit transaction
end try
begin catch
    rollback;
end catch

要么 :

declare @cnt int;

set xact_abort on
begin transaction

begin try
    select @cnt = count(distinct SetId) from sets;
    truncate table sets
    commit transaction
end try
begin catch
    rollback;
end catch

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM