Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Löschen Sie Daten über eine Tabellenwertfunktion in SQL Server

In SQL Server ist es möglich, eine Tabellenwertfunktion (TVF) zu verwenden, um Daten aus den zugrunde liegenden Tabellen zu löschen, die die TVF abfragt.

Um Tabellendaten über ein TVF zu löschen, verwenden Sie einfach denselben T-SQL-DELETE Syntax, die Sie verwenden würden, wenn Sie eine Zeile direkt aus der Tabelle löschen würden.

Beispiel

Hier ist ein kurzes Beispiel zur Veranschaulichung.

Die Funktion

Hier ist eine schnelle Inline-Tabellenwertfunktion, die grundlegende Daten aus einer Tabelle auswählt.

CREATE FUNCTION dbo.udf_Cats_ITVF()
    RETURNS TABLE
AS
RETURN (
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats
    );
GO

Diese Funktion selektiert alle Zeilen einer Tabelle.

Ich kann diese Funktion auch verwenden, um Zeilen aus dieser Tabelle zu löschen.

Daten mit der Funktion auswählen

So rufen wir die Funktion normalerweise mit einem SELECT auf Erklärung. Dadurch können wir die aktuellen Daten in der zugrunde liegenden Tabelle sehen.

SELECT * FROM udf_Cats_ITVF();

Ergebnis:

+---------+-----------+------------+
| CatId   | CatName   | Phone      |
|---------+-----------+------------|
| 1       | Garfield  | 9871237654 |
| 2       | Felix     | 8871237651 |
| 3       | Tom       | 7871237652 |
| 4       | Fetch     | 6871237653 |
| 5       | Scratchy  | 1111111111 |
+---------+-----------+------------+

Es gibt also fünf Reihen.

Lass uns Scratchy löschen.

Eine Zeile über die Funktion löschen

Lassen Sie uns nun das TVF verwenden, um eine Zeile zu löschen.

DELETE FROM udf_Cats_ITVF()
WHERE CatId = 5;   

SELECT * FROM udf_Cats_ITVF();

Ergebnis:

+---------+-----------+------------+
| CatId   | CatName   | Phone      |
|---------+-----------+------------|
| 1       | Garfield  | 9871237654 |
| 2       | Felix     | 8871237651 |
| 3       | Tom       | 7871237652 |
| 4       | Fetch     | 6871237653 |
+---------+-----------+------------+

Also habe ich Scratchy erfolgreich mit der Inline-Tabellenwertfunktion gelöscht.