sql >> Databáze >  >> RDS >> Sqlserver

Jak zkrátíte všechny tabulky v databázi pomocí TSQL?

Když se zabýváme mazáním dat z tabulek, které mají vztahy s cizím klíčem – což je v podstatě případ každé správně navržené databáze – můžeme zakázat všechna omezení, smazat všechna data a poté omezení znovu povolit

-- disable all constraints
EXEC sp_MSForEachTable "ALTER TABLE ? NOCHECK CONSTRAINT all"

-- delete data in all tables
EXEC sp_MSForEachTable "DELETE FROM ?"

-- enable all constraints
exec sp_MSForEachTable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

Více o deaktivaci omezení a spouštěčů zde

pokud některé tabulky obsahují sloupce identity, můžeme je chtít znovu nasadit

EXEC sp_MSForEachTable "DBCC CHECKIDENT ( '?', RESEED, 0)"

Všimněte si, že chování RESEED se liší mezi úplně novou tabulkou a tabulkou, do které byla dříve vložena nějaká data z BOL:

DBCC CHECKIDENT ('table_name', RESEED, newReseedValue)

Aktuální hodnota identity je nastavena na newReseedValue. Pokud nebyly do tabulky od jejího vytvoření vloženy žádné řádky, první řádek vložený po provedení DBCC CHECKIDENT použije jako identitu newReseedValue. Jinak další vložený řádek použije newReseedValue + 1. Pokud je hodnota newReseedValue menší než maximální hodnota ve sloupci identity, při následných odkazech na tabulku bude vygenerována chybová zpráva 2627.

Děkuji Robertovi za upozornění na skutečnost, že deaktivace omezení neumožňuje použít zkrácení, omezení by musela být zrušena a poté znovu vytvořena



  1. Jak mohu upravit velikost sloupce v tabulce MySQL?

  2. Žádná forma ukládání do mezipaměti databáze ke snížení duplicitních databázových dotazů.

  3. Jak dělat modelování dědičnosti v relačních databázích?

  4. Zastaralé:mysql_connect()