This blog post will explain how this works in Umbraco Forms 8.4.4. Database tables will most likely change between versions so keep this in mind - one might have to adjust the SQL-scripts depending on the Umbraco Forms-version.
Before diving into details we need to be on the same page when it comes to the different building blocks in Umbraco Forms.
A Form is an actual Form, with all its fields, configured in the backoffice. Umbraco Forms stores the actual Forms as json-files on disk (\App_Data\UmbracoForms\Data\forms).
A Form is built up by adding Fields to the form, giving them a name, alias and choosing a Form Field Type.
An entry is what gets stored when a visitor/user posts a Form. One can browse these Entries by expanding a form and clicking on "Entries". Each entry is stored together with all the values for the different Fields in the Form.
Here is a brief overview of the data tables used by Umbraco Forms.
Entries and Fields
A UFRecord in the database is the same as one Entry in the UI. Each posted form will generate one UFRecord. This table contains information like when the Entry was created, on which page and from what IP.
This table "connects" each Field in the Form with the Entry. If the form has 5 fields, there should be 5 rows in this table for each Entry/Record.
All these tables are used to store data based on the data-type, they have a id and key-column and a column for the value (base on the data type).
Stores security settings related to specific Backoffice Users
Stores security settings related to specific Forms
Delete data with SQL-script
To be able to delete an Entry we need to remove all related data in the UFRecordDataXXX-tables, the UFRecordFields and the UFRecord it self.
Here is a SQL-statement to remove Entries from Umbraco Forms, set the @formKey to only remove entries for specific Form, or use an empty string as @formKey to remove all Entries.
-- Use this to delete entries for a single form DECLARE @formKey nvarchar(MAX) = 'f8274271-239c-4564-9f5e-0629bb02ca01'; -- Use this to delete entries for all forms --DECLARE @formKey nvarchar(MAX) = ''; DECLARE @formRecordIds TABLE ( recordId int ); DECLARE @fieldKeys TABLE ( fieldKey uniqueidentifier ); IF @formKey = '' BEGIN INSERT INTO @formRecordIds SELECT [id] FROM [UFRecords] END ELSE BEGIN INSERT INTO @formRecordIds SELECT [id] FROM [UFRecords] WHERE [Form] = @formKey END -- Populate temp-table with a record-ids for the given form. Should match the number if the Umbraco Forms-dashboard SELECT * FROM @formRecordIds -- Populate the fieldKeys with all Field keys for any of the Records for the Form INSERT INTO @fieldKeys SELECT [key] FROM [UFRecordFields] WHERE [Record] IN (SELECT recordId FROM @formRecordIds) SELECT * FROM @fieldKeys -- Delete all UFRecordDataXXX rows for any of the Fields in any of the Records DELETE FROM UFRecordDataBit WHERE [key] IN (SELECT fieldKey FROM @fieldKeys) DELETE FROM UFRecordDataDateTime WHERE [key] IN (SELECT fieldKey FROM @fieldKeys) DELETE FROM UFRecordDataInteger WHERE [key] IN (SELECT fieldKey FROM @fieldKeys) DELETE FROM UFRecordDataLongString WHERE [key] IN (SELECT fieldKey FROM @fieldKeys) DELETE FROM UFRecordDataString WHERE [key] IN (SELECT fieldKey FROM @fieldKeys) -- Delete the Fields DELETE FROM UFRecordFields WHERE [key] IN (SELECT fieldKey FROM @fieldKeys) -- Delete the Records DELETE FROM UFRecords WHERE id IN (SELECT recordId FROM @formRecordIds)