sql >> Databasteknik >  >> RDS >> Sqlserver

Ta bort data via en tabellvärderad funktion i SQL Server

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.


  1. Hur kan jag komma åt MySQL-kommandoraden med XAMPP för Windows?

  2. Kör en lagrad procedur i en annan lagrad procedur i SQL-servern

  3. Handledning för formulär och rapporter för Oracle 9i, Oracle 10g och Oracle 11g Developer Suite

  4. 5 sätt att fixa felet "Dela med noll" i SQL Server (Msg 8134)