많은 테이블이있는 데이터베이스가 주어지면 여러 개의 delete 및 truncate 문이 채워진 스크립트가 있습니다. 내 데이터베이스에있는 각 테이블에 대해 delete 문이나 truncate 문이 없습니다. 스크립트는 다음 (나는 길이 이름을 변경하고 단축 한) 다음과 같습니다삭제 또는 truncate 문에 정의되지 않은 테이블에서 데이터가 제거되는 방식은 무엇입니까?
TRUNCATE table db.dbo.table1
TRUNCATE table db.dbo.table2
TRUNCATE table db.dbo.table3
--cannot truncate table because it is being referenced by a FK constraint
--TRUNCATE table db.dbo.table4
--TRUNCATE table db.dbo.table5
--TRUNCATE table db.dbo.table6
--TRUNCATE table db.dbo.table7
DELETE FROM db.dbo.table4
DBCC CHECKIDENT ('db.dbo.table4',RESEED, 0)
DELETE FROM db.dbo.table5
DBCC CHECKIDENT ('db.dbo.table5',RESEED, 0)
DELETE FROM db.dbo.table6
DBCC CHECKIDENT ('db.dbo.table6',RESEED, 0)
DELETE FROM db.dbo.table7
DBCC CHECKIDENT ('db.dbo.table7',RESEED, 0)
DELETE FROM db.dbo.table8
DELETE FROM db.dbo.table9
DELETE FROM db.dbo.table10
DELETE FROM db.dbo.table11
DELETE FROM db.dbo.table12
DELETE FROM db.dbo.table13
DELETE FROM db.dbo.table14
DELETE FROM db.dbo.table15
스크립트를 실행 한 후, 나는 그 데이터가 스크립트에 포함되지 않은 테이블에서 제거되고 발견하고있다.
데이터가있는 테이블을 확인하려면 SO 대답에서 찾은 here이라는 쿼리를 사용하고 있습니다.
SELECT
t.NAME AS TableName,
SUM(p.rows) AS [RowCount]
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
WHERE
i.index_id <= 1
GROUP BY
t.NAME, i.object_id, i.index_id, i.name
ORDER BY
SUM(p.rows) DESC
데이터베이스 백업이 있습니다. 다음으로는 :
- 데이터베이스
- 실행 '테이블 데이터'쿼리 복원 : 정말 삭제에 포함되지 않은 테이블에 존재하지 데이터를 재확인하기를/ 을 스크립트를 절단/삭제 실행 스크립트를
- 을 절단
- '테이블 데이터'쿼리를 실행하십시오.
결과는 다음과 같습니다. 삭제/잘라 내기 스크립트에 정의되지 않은 테이블에서 데이터가 제거되고 있습니다.
내 질문 : 삭제 또는 truncate 문에서 정의되지 않은 테이블에서 데이터가 제거되는 방식으로 데이터베이스의 모든 테이블이 아닌 하나 이상의 테이블을 삭제하거나 자르는 경우를 생각해보십시오.
그럼 직접 질문 하시겠습니까? 나는 downvoting하지 않습니다. –
방아쇠가 삭제를 유발할 수 있다고 생각하면됩니다. –