I SQL Server är det möjligt att använda en tabellvärderad funktion (TVF) för att ta bort data från de underliggande tabellerna som TVF frågar efter.
För att radera tabelldata via en TVF, använd helt enkelt samma T-SQL DELETE
syntax som du skulle använda om du tar bort en rad direkt från tabellen.
Exempel
Här är ett snabbt exempel att visa.
Funktionen
Här är en snabb inline-tabellvärderad funktion som väljer grundläggande data från en tabell.
CREATE FUNCTION dbo.udf_Cats_ITVF() RETURNS TABLE AS RETURN ( SELECT CatId, CatName, Phone FROM dbo.Cats ); GO
Denna funktion väljer alla rader från en tabell.
Jag kan också använda den här funktionen för att ta bort rader från den tabellen.
Välj Data med funktionen
Så här skulle vi normalt anropa funktionen med en SELECT
påstående. Detta gör att vi kan se aktuell data i den underliggande tabellen.
SELECT * FROM udf_Cats_ITVF();
Resultat:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 1 | Garfield | 9871237654 | | 2 | Felix | 8871237651 | | 3 | Tom | 7871237652 | | 4 | Fetch | 6871237653 | | 5 | Scratchy | 1111111111 | +---------+-----------+------------+
Så det finns fem rader.
Låt oss ta bort Scratchy.
Ta bort en rad via funktionen
Låt oss nu använda TVF för att ta bort en rad.
DELETE FROM udf_Cats_ITVF() WHERE CatId = 5; SELECT * FROM udf_Cats_ITVF();
Resultat:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 1 | Garfield | 9871237654 | | 2 | Felix | 8871237651 | | 3 | Tom | 7871237652 | | 4 | Fetch | 6871237653 | +---------+-----------+------------+
Så jag tog bort Scratchy med den inline-tabellvärderade funktionen.