Update from Sync Service

This commit is contained in:
FNS Service
2026-04-21 21:15:34 +08:00
parent e927b9c998
commit ff2dc5b648
2 changed files with 103 additions and 58 deletions

View File

@@ -1,15 +1,57 @@
begin tran # 数据去重方法
> SQL Server 数据去重常用方法
## 方法一:使用 DISTINCT
```sql ```sql
select distinct * into #temp from DataSyncStationSX SELECT DISTINCT * FROM TableName
delete DataSyncStationSX
go
insert DataSyncStationSX select * from #temp Sqlclub
go
drop table #temp
select * from DataSyncStationSX
``` ```
order by sid
commit ## 方法二:临时表去重
```sql
BEGIN TRAN
-- 1. 选中不重复的数据到临时表
SELECT DISTINCT * INTO #temp FROM DataSyncStationSX
-- 2. 删除原表数据
DELETE FROM DataSyncStationSX
-- 3. 从临时表导回
INSERT INTO DataSyncStationSX SELECT * FROM #temp
-- 4. 删除临时表
DROP TABLE #temp
COMMIT
```
## 方法三ROW_NUMBER 去重
```sql
-- 删除重复数据,保留最新一条
DELETE FROM TableName
WHERE ID IN (
SELECT ID FROM (
SELECT ID, ROW_NUMBER() OVER (PARTITION BY duplicate_column ORDER BY created_time DESC) AS rn
FROM TableName
) t
WHERE rn > 1
)
```
## 方法四:查找重复数据
```sql
-- 查找重复记录
SELECT column1, column2, COUNT(*) as cnt
FROM TableName
GROUP BY column1, column2
HAVING COUNT(*) > 1
```
---
> ⚠️ 执行删除前请先备份数据!

View File

@@ -1,55 +1,58 @@
--创建临时 # 循环批量删除数据库
```sql
create table #Man(
```
id int identity(1,1),
tbName nvarchar(50)
) --往临时表插入数据
```sql
insert into #Man
select name from sys.tables
where create_date<='2018-03-10 15:36:35.687' and name not in ('DeviceNetState','EphInfo','FilterStatistic','UserInfo','AlmInfo')
```
order by create_date desc
--确认 > SQL Server 批量删除指定条件的表
```sql
select * from #Man
``` ## 存储过程
commit
rollback
begin tran
--定义循环变量
```sql
declare @i int
set @i = 1
declare @count int
select @count = count(*) from #Man
```
--print @count
```sql ```sql
declare @str nvarchar(500) -- 创建临时表存储表名
declare @tb nvarchar(50) CREATE TABLE #Man (
id INT IDENTITY(1,1),
tbName NVARCHAR(50)
)
``` -- 插入要删除的表名(排除保留表)
while(@i <= @count) begin INSERT INTO #Man
SELECT name
FROM sys.tables
WHERE create_date <= '2018-03-10 15:36:35.687'
AND name NOT IN ('DeviceNetState', 'EphInfo', 'FilterStatistic', 'UserInfo', 'AlmInfo')
ORDER BY create_date DESC
```sql -- 确认要删除的表
select @tb = isnull(tbName, '') from #Man where id = @i SELECT * FROM #Man
```
--循环执行语句
```sql
set @str = 'drop table [' + @tb+ ']'
```
exec(@str)
```sql -- 开始删除
set @str = '' DECLARE @i INT = 1
set @i = @i + 1 DECLARE @count INT
SELECT @count = COUNT(*) FROM #Man
DECLARE @str NVARCHAR(500)
DECLARE @tb NVARCHAR(50)
WHILE (@i <= @count)
BEGIN
SELECT @tb = ISNULL(tbName, '') FROM #Man WHERE id = @i
SET @str = 'DROP TABLE [' + @tb + ']'
EXEC(@str)
SET @i = @i + 1
END
-- 清理临时表
DROP TABLE #Man
``` ```
end
---
## 安全建议
1. **先 SELECT 确认**:删除前先只 SELECT确认无误再执行 DELETE
2. **排除保留表**:一定要排除系统表和重要业务表
3. **备份**:生产环境先备份再执行
4. **分批执行**:大量删除时分批进行,避免锁表时间过长
---
> ⚠️ **警告**:此操作不可逆,执行前务必确认!