TRUNCATE TABLE (Transact-SQL)TRUNCATE TABLE (Transact-SQL)

S’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance ouiAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics ouiParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data WarehouseS’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance ouiAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics ouiParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

Supprime toutes les lignes d’une table ou des partitions spécifiées d’une table, sans journaliser les suppressions de ligne individuelles.Removes all rows from a table or specified partitions of a table, without logging the individual row deletions. L'instruction TRUNCATE TABLE est semblable à l'instruction DELETE sans la clause WHERE. Cependant, l'instruction TRUNCATE TABLE est plus rapide et utilise moins de ressources système et de ressources du journal des transactions.TRUNCATE TABLE is similar to the DELETE statement with no WHERE clause; however, TRUNCATE TABLE is faster and uses fewer system and transaction log resources.

Icône du lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

-- Syntax for SQL Server and Azure SQL Database  
  
TRUNCATE TABLE   
    { database_name.schema_name.table_name | schema_name.table_name | table_name }  
    [ WITH ( PARTITIONS ( { <partition_number_expression> | <range> }   
    [ , ...n ] ) ) ]  
[ ; ]  
  
<range> ::=  
<partition_number_expression> TO <partition_number_expression>  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  
  
TRUNCATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }  
[;]  

Notes

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez Versions antérieures de la documentation.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

ArgumentsArguments

database_namedatabase_name
Nom de la base de données.Is the name of the database.

schema_nameschema_name
Nom du schéma auquel appartient la table.Is the name of the schema to which the table belongs.

table_nametable_name
Nom de la table à tronquer ou dont toutes les lignes sont supprimées.Is the name of the table to truncate or from which all rows are removed. table_name doit être un littéral.table_name must be a literal. table_name ne peut pas être la fonction OBJECT_ID() ou une variable.table_name cannot be the OBJECT_ID() function or a variable.

WITH ( PARTITIONS ( { <partition_number_expression> | <range> } [ , ...n ] ) )WITH ( PARTITIONS ( { <partition_number_expression> | <range> } [ , ...n ] ) )
S’applique à : SQL ServerSQL Server (de SQL Server 2016 (13.x)SQL Server 2016 (13.x) à la version actuelle).Applies to: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through current version)

Spécifie les partitions à tronquer ou à partir desquelles toutes les lignes sont supprimées.Specifies the partitions to truncate or from which all rows are removed. Si la table n'est pas partitionnée, l'argument WITH PARTITIONS génère une erreur.If the table is not partitioned, the WITH PARTITIONS argument will generate an error. Si la clause WITH PARTITIONS n’est pas fournie, la table entière sera tronquée.If the WITH PARTITIONS clause is not provided, the entire table will be truncated.

<partition_number_expression> peut être spécifié des manières suivantes :<partition_number_expression> can be specified in the following ways:

  • Spécifiez le numéro d’une partition, par exemple : WITH (PARTITIONS (2))Provide the number of a partition, for example: WITH (PARTITIONS (2))

  • Spécifiez les numéros de plusieurs partitions individuelles séparés par des virgules, par exemple : WITH (PARTITIONS (1, 5))Provide the partition numbers for several individual partitions separated by commas, for example: WITH (PARTITIONS (1, 5))

  • Spécifiez à la fois des plages et des partitions individuelles, par exemple : WITH (PARTITIONS (2, 4, 6 TO 8))Provide both ranges and individual partitions, for example: WITH (PARTITIONS (2, 4, 6 TO 8))

  • <range> peut être spécifié sous la forme de numéros de partitions séparés par le mot TO, par exemple : WITH (PARTITIONS (6 TO 8))<range> can be specified as partition numbers separated by the word TO, for example: WITH (PARTITIONS (6 TO 8))

Pour tronquer une table partitionnée, la table et les index doivent être alignés (partitionnés sur la même fonction de partition).To truncate a partitioned table, the table and indexes must be aligned (partitioned on the same partition function).

NotesRemarks

Comparée à l’instruction DELETE, TRUNCATE TABLE offre les avantages suivants :Compared to the DELETE statement, TRUNCATE TABLE has the following advantages:

  • Moindre espace du journal des transactions utilisé.Less transaction log space is used.

    L'instruction DELETE supprime une ligne à la fois et enregistre une entrée dans le journal des transactions pour chaque ligne supprimée.The DELETE statement removes rows one at a time and records an entry in the transaction log for each deleted row. TRUNCATE TABLE supprime les données en désallouant les pages de données utilisées pour stocker les données de la table et enregistre uniquement les désallocations de page dans le journal des transactions.TRUNCATE TABLE removes the data by deallocating the data pages used to store the table data and records only the page deallocations in the transaction log.

  • Moins de verrous utilisés.Fewer locks are typically used.

    Lors de l'exécution de l'instruction DELETE à l'aide d'un verrou de ligne, chaque ligne dans la table est verrouillée pour être supprimée.When the DELETE statement is executed using a row lock, each row in the table is locked for deletion. TRUNCATE TABLE verrouille toujours la table (y compris un verrou de schéma SCH-M) et la page, mais pas les lignes.TRUNCATE TABLE always locks the table (including a schema (SCH-M) lock) and page but not each row.

  • Sans exception, les pages zéros demeurent dans la table.Without exception, zero pages are left in the table.

    Après l'exécution d'une instruction DELETE, la table peut encore contenir des pages vides.After a DELETE statement is executed, the table can still contain empty pages. Par exemple, des pages vides dans un segment ne peuvent pas être désallouées sans au moins un verrou de table exclusif (LCK_M_X).For example, empty pages in a heap cannot be deallocated without at least an exclusive (LCK_M_X) table lock. Si la suppression n'utilise pas de verrou de table, la table (le segment) contiendra beaucoup de pages vides.If the delete operation does not use a table lock, the table (heap) will contain many empty pages. La suppression peut laisser des pages vides pour les index, bien que ces pages soient désallouées rapidement par un processus de nettoyage en arrière-plan.For indexes, the delete operation can leave empty pages behind, although these pages will be deallocated quickly by a background cleanup process.

TRUNCATE TABLE supprime toutes les lignes d’une table, mais la structure de la table et ses colonnes, contraintes, index, etc. sont conservés.TRUNCATE TABLE removes all rows from a table, but the table structure and its columns, constraints, indexes, and so on remain. Pour supprimer la définition de la table en plus de ses données, utilisez l’instruction DROP TABLE.To remove the table definition in addition to its data, use the DROP TABLE statement.

Si la table contient une colonne d'identité, le compteur pour celle-ci est redéfini sur sa valeur de départ.If the table contains an identity column, the counter for that column is reset to the seed value defined for the column. Si aucune valeur de départ n'est définie, la valeur par défaut 1 est utilisée.If no seed was defined, the default value 1 is used. Utilisez plutôt l'instruction DELETE pour conserver le compteur d'identité.To retain the identity counter, use DELETE instead.

Notes

Une opération TRUNCATE TABLE peut être restaurée.A TRUNCATE TABLE operation can be rolled back.

RestrictionsRestrictions

Vous ne pouvez pas utiliser TRUNCATE TABLE sur des tables qui :You cannot use TRUNCATE TABLE on tables that:

  • sont référencées par une contrainte FOREIGN KEY ;Are referenced by a FOREIGN KEY constraint. Vous pouvez tronquer une table qui a une clé étrangère qui fait référence à elle-même.You can truncate a table that has a foreign key that references itself.

  • participent à une vue indexée ;Participate in an indexed view.

  • sont publiées à l'aide d'une réplication transactionnelle ou de fusion.Are published by using transactional replication or merge replication.

  • sont temporelles avec versions gérées ;Are system-versioned temporal.

  • sont référencées par une contrainte EDGE.Are referenced by an EDGE constraint.

Utilisez plutôt l'instruction DELETE pour les tables ayant au moins une de ces caractéristiques.For tables with one or more of these characteristics, use the DELETE statement instead.

L'instruction TRUNCATE TABLE ne peut pas activer un déclencheur car l'opération ne consigne pas les suppressions de lignes dans le journal.TRUNCATE TABLE cannot activate a trigger because the operation does not log individual row deletions. Pour plus d’informations, consultez CREATE TRIGGER (Transact-SQL).For more information, see CREATE TRIGGER (Transact-SQL).

Dans Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) et Parallel Data WarehouseParallel Data Warehouse :In Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) and Parallel Data WarehouseParallel Data Warehouse:

  • L’instruction TRUNCATE TABLE n’est pas autorisée dans l’instruction EXPLAIN.TRUNCATE TABLE is not allowed within the EXPLAIN statement.

  • L’instruction TRUNCATE TABLE ne peut pas être exécutée à l’intérieur d’une transaction.TRUNCATE TABLE cannot be ran inside of a transaction.

Troncation de grandes tablesTruncating Large Tables

MicrosoftMicrosoft SQL ServerSQL Server permet de supprimer ou de tronquer des tables dotées de plus de 128 extensions, sans maintenir de verrous simultanés sur toutes les extensions exigées pour la suppression.SQL ServerSQL Server has the ability to drop or truncate tables that have more than 128 extents without holding simultaneous locks on all the extents required for the drop.

AutorisationsPermissions

L’autorisation minimale exigée est ALTER sur table_name.The minimum permission required is ALTER on table_name. Les autorisations TRUNCATE TABLE sont accordées par défaut au propriétaire de la table, aux membres du rôle serveur fixe sysadmin, aux rôles de base de données fixes db_owner et db_ddladmin et ne sont pas transférables.TRUNCATE TABLE permissions default to the table owner, members of the sysadmin fixed server role, and the db_owner and db_ddladmin fixed database roles, and are not transferable. Toutefois, vous pouvez incorporer l’instruction TRUNCATE TABLE dans un module, par exemple une procédure stockée, et accorder les autorisations appropriées au module à l’aide de la clause EXECUTE AS.However, you can incorporate the TRUNCATE TABLE statement within a module, such as a stored procedure, and grant appropriate permissions to the module using the EXECUTE AS clause.

ExemplesExamples

R.A. Tronquer une tableTruncate a Table

L'exemple suivant supprime toutes les données de la table JobCandidate.The following example removes all data from the JobCandidate table. Des instructions SELECT sont incluses avant et après l'instruction TRUNCATE TABLE pour comparer les résultats.SELECT statements are included before and after the TRUNCATE TABLE statement to compare results.

USE AdventureWorks2012;  
GO  
SELECT COUNT(*) AS BeforeTruncateCount   
FROM HumanResources.JobCandidate;  
GO  
TRUNCATE TABLE HumanResources.JobCandidate;  
GO  
SELECT COUNT(*) AS AfterTruncateCount   
FROM HumanResources.JobCandidate;  
GO  

B.B. Tronquer les partitions de tableTruncate Table Partitions

S’applique à : SQL ServerSQL Server (de SQL Server 2016 (13.x)SQL Server 2016 (13.x) à la version actuelle).Applies to: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through current version)

L'exemple suivant tronque les partitions spécifiées d'une table partitionnée.The following example truncates specified partitions of a partitioned table. La syntaxe WITH (PARTITIONS (2, 4, 6 TO 8)) provoque la troncation des numéros de partitions 2, 4, 6, 7 et 8.The WITH (PARTITIONS (2, 4, 6 TO 8)) syntax causes partition numbers 2, 4, 6, 7, and 8 to be truncated.

TRUNCATE TABLE PartitionTable1   
WITH (PARTITIONS (2, 4, 6 TO 8));  
GO  

Voir aussiSee Also

DELETE (Transact-SQL) DELETE (Transact-SQL)
DROP TABLE (Transact-SQL) DROP TABLE (Transact-SQL)
IDENTITY (propriété) (Transact-SQL)IDENTITY (Property) (Transact-SQL)