sql 서버 는 아 카 이브 유 니 버 설 템 플 릿 스 크 립 트 를 작성 하여 데 이 터 를 자동 으로 분할 삭제 합 니 다.
이러한 상황 에 따라 이번 주 블 로 거(zhang 502219048)는 마침 작업 과정 에서 데 이 터 를 자동 으로 분할 삭제 하 는 템 플 릿 을 정리 하고 작 성 했 습 니 다.템 플 릿 은 고정 되 어 있 지 않 습 니 다.delete 구문 에 만 집중 하고 delete 구문 에서 모든 삭 제 된 데 이 터 를 제어 할 수 있 습 니 다.비교적 편리 합 니 다.변 수 를 통 해 템 플 릿 sql 을 조립 할 수 있 습 니 다.표 마다 분할 논리 적 중복 코드 를 따로 쓰 지 않 고 복잡 하 게 간소화 하 며,표 의 지정 한 데 이 터 를 추가 로 삭제 하면 몇 줄 의 코드 만 추가 하면 된다(아래 의 demo 1 과 demo 2).
demo 1:매개 변수 없 이 표 tmpDel 은 표 A 에 대응 하 는 ID 의 데 이 터 를 삭제 합 니 다.
demo 2:Date 필드 가 만 료 되 었 는 지 여부 에 따라 표 B 에 대응 하 는 데 이 터 를 삭제 합 니 다.
구체 적 으로 아래 의 스 크 립 트 와 관련 설명 을 참고 하 세 요.모 르 는 부분 이 있 으 면 댓 글 이나 개인 편지 로 블 로 거들 에 게 문의 하 세 요.
-- ===== 1 archive =======================================================
--【 】
/*
:
1. archive :@sql = @sql_Part1 + @sql_Del + @sql_Part2
2. @parameters :@parameters = @parameters_Base +
3. :@strStepInfo print step
4. archive @sql_Del, 。
*/
declare @parameters nvarchar(max) = ''
, @parameters_Base nvarchar(max) = N'@strStepInfo nvarchar(100)'
, @sql nvarchar(max) = ''
, @sql_Part1 nvarchar(max) = N'
declare @iBatch int = 1, --
@iRowCount int = -1 -- , -1, @@ROWCOUNT
print convert(varchar(50), getdate(), 121) + @strStepInfo
while @iRowCount <> 0
begin
print ''begin batch:''
print @iBatch
print convert(varchar(50), getdate(), 121)
begin try
begin tran
'
, @sql_Del nvarchar(max) = '
' --@sql_Del
, @sql_Part2 nvarchar(max) = N'
select @iRowCount = @@rowcount
commit tran
end try
begin catch
rollback tran
print ''-- Error Message:'' + convert(varchar, error_line()) + '' | '' + error_message()
end catch
waitfor delay ''0:00:01'' --
print convert(varchar(50), getdate(), 121)
print ''end batch''
select @iBatch = @iBatch + 1
end'
-- ===== 2 demo1(delete ):archive A =======================================================
select @parameters = @parameters_Base + '' -- , , @parameters = @parameters_Base + ', @ArchiveDate datetime'
, @sql_Del = '
delete top (50000) tc_Del
from A tc_Del
inner join tmp_Del cd on cd.ID = tc_Del.ID
'
select @sql = @sql_Part1 + @sql_Del + @sql_Part2
print @sql
exec sp_executesql @sql, @parameters, N' 2 archive A'
-- ===== 3 demo2(delete ):archive B =======================================================
select @parameters = @parameters_Base + ', @ArchiveDaate datetime' -- , , @parameters = @parameters_Base + ', @ArchiveDate datetime'
, @sql_Del = '
delete top (50000)
from B
where Date < @ArchiveDate
'
select @sql = @sql_Part1 + @sql_Del + @sql_Part2
print @sql
exec sp_executesql @sql, @parameters, N' 3 archive B', @ArchiveDate
총결산위 에서 말 한 것 은 소 편 이 소개 한 sql server 에서 archive 유 니 버 설 템 플 릿 스 크 립 트 를 작성 하여 자동 으로 데 이 터 를 분할 삭제 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
깊이 중첩된 객체를 정확히 일치 검색 - PostgreSQL목차 * 🚀 * 🎯 * 🏁 * 🙏 JSON 객체 예시 따라서 우리의 현재 목표는 "고용주"사용자가 입력한 검색어(이 경우에는 '요리')를 얻고 이 용어와 정확히 일치하는 모든 사용자 프로필을 찾는 것입니다. 즐거운 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.