I SQL Server er det muligt at bruge en tabelværdi-funktion (TVF) til at slette data fra de underliggende tabeller, som TVF'et forespørger på.
For at slette tabeldata via en TVF skal du blot bruge den samme T-SQL DELETE
syntaks, som du ville bruge, hvis du sletter en række fra tabellen direkte.
Eksempel
Her er et hurtigt eksempel at demonstrere.
Funktionen
Her er en hurtig indlejret tabelværdi-funktion, der vælger grundlæggende data fra en tabel.
CREATE FUNCTION dbo.udf_Cats_ITVF() RETURNS TABLE AS RETURN ( SELECT CatId, CatName, Phone FROM dbo.Cats ); GO
Denne funktion vælger alle rækker fra en tabel.
Jeg kan også bruge denne funktion til at slette rækker fra den tabel.
Vælg Data med funktionen
Her er, hvordan vi normalt ville starte funktionen med en SELECT
udmelding. Dette gør det muligt for os at se de aktuelle data i den underliggende tabel.
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å der er fem rækker.
Lad os slette Scratchy.
Slet en række via funktionen
Lad os nu bruge TVF til at slette en række.
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å jeg slettede Scratchy med succes ved at bruge den indbyggede tabelværdi-funktion.