多くのテーブルを持つデータベースでは、いくつかのdelete文とtruncate文が挿入されたスクリプトがあります。私は、データベース内の各テーブルに対して、deleteステートメントまたはtruncateステートメントを持っていません。スクリプトは(私は名前を変更し、長さを短くしている)、次のようになります。スクリプトを実行した後delete文または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
私はデータベースのバックアップを持っています。次のI:スクリプト を切り詰め/削除を実行そのデータを二重にチェックするために、実際にテーブルに削除/切り捨てスクリプト
- 「テーブルデータ」クエリがデータベース
- 実行を復元
- 'テーブルデータ'クエリを実行
私の知見は次のとおりです。削除/切り捨てスクリプトで定義されていないテーブルからデータが削除されています。
私の質問:データベース内のすべてのテーブルではなく、複数のテーブルを削除または切り捨てる場合、削除または切り捨てステートメントで定義されていないテーブルからデータが削除されるのはどうですか?
あなたは自分自身に答える質問をしますか? btw私はdownvotingしていません。 –
場合によっては、トリガーによっても削除される可能性があると考えてください。 –