Puis-je utiliser la commande truncate avec une clause where? J'ai besoin de supprimer des lignes spécifiques de plusieurs tables.
Comment puis-je supprimer des données spécifiques de toute la base de données?
SELECT DimEmployee.[FirstName], DimEmployee.[LastName], [SalesOrderNumber], [ShipDateKey]
FROM DimEmployee
JOIN [FactResellerSales]
ON DimEmployee.[EmployeeKey] = [FactResellerSales].[ProductKey]
WHERE DimEmployee.[FirstName] like 'kevin%' <--have to truncate this specific name from entire DB
Existe-t-il une autre méthode pour supprimer des données spécifiques de la base de données entière?
Dans ma base de données, il y a 172 tables. Je voulais supprimer un nom spécifique et ses colonnes correspondantes de la base de données entière. Le nom est réparti sur toute la base de données, donc je veux le supprimer en une seule fois au lieu d'aller dans chaque table et de le supprimer individuellement.
Non, Truncate ne peut pas être utilisé avec une clause WHERE
. Tronquer désalloue simplement toutes les pages appartenant à une table (ou une partition) et ses index.
De BOL :
-- Syntax for SQL Server and Azure SQL Database
TRUNCATE TABLE
[ { database_name .[ schema_name ] . | schema_name . } ]
table_name
[ WITH ( PARTITIONS ( { <partition_number_expression> | <range> }
[ , ...n ] ) ) ]
[ ; ]
Si vous cherchez un moyen plus efficace de supprimer des données, je commencer ici .
Il existe trois méthodes de suppression dans le serveur SQL: Truncate
, Delete
, Drop
DROP, TRUNCATE sont des commandes DDL (DROP est utilisé pour supprimer des objets comme des tables, des colonnes, des contraintes, ... mais pas des lignes)
DELETE est une commande DML.
"TRUNCATE Supprime toutes les lignes d'une table sans enregistrer les suppressions de lignes individuelles. TRUNCATE TABLE est similaire à l'instruction DELETE sans clause WHERE; cependant, TRUNCATE TABLE est plus rapide et utilise moins de ressources système et de journal des transactions ..." En savoir plus
Vous devez créer une commande en utilisant un SQL dynamique et l'exécuter: (quelque chose comme cette requête)
DECLARE @strquery as NVARCHAR(MAX)
SET @strquery = ''
SELECT 'Delete T2 from [' + Table_name + '] As T2
Inner join DimEmployee as T1
On T1.[EmployeeKey] = T2.[ProductKey]
Where T1.[FirstName] like ''kevin%'';'
From information_schema.tables
WHERE table_name <> 'DimEmployee'
EXEC(@strquery)
Liens utiles