sql - SQL 计数唯一删除集
问题描述
我目前在我的数据库中有一个简单的表来存储集合和值。我希望能够删除数据库中的所有条目并返回已删除的不同集的数量。
create table sets(
SetId varchar(50)
Value int
)
如果我有两组,每组都有两个值,那么表格将被加载四个条目。
Set1, 0
Set1, 1
Set2, 0
Set2, 1
如果我删除所有我希望能够计算删除的唯一 SetId 的所有内容,那么在上面的示例中它应该返回 2。
现在我可以通过创建一个包含已删除 SetIds 的 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
推荐阅读
- wordpress - 添加了 adsense html 代码,但它显示了两次
- c - 无法使用gets()函数获取输入
- node.js - Node.js 应用程序不会在 Microsoft Azure 应用程序服务 (Linux) 中启动
- maven - 如何解决自定义依赖项覆盖错误
- node.js - 如何在 Dockerfile 中为 ruby:3.0.1-alpine3.13 映像设置节点版本为 16.x
- javascript - 如何根据输入显示匹配的 div?
- google-cloud-platform - 我无法访问我的 Compute Engine 实例上的外部 IP
- amazon-web-services - 指向 S3 存储桶和 ELB 的 Cloudfront 分发
- java - Vertx HttpProxy 正在“丢失” Http Request 参数
- asp.net-core - 找不到类型或命名空间名称“ApplicationUser”(您是否缺少 using 指令或程序集引用?)