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

Ändern Sie eine Tabellenwertfunktion in SQL Server

Sie können eine Tabellenwertfunktion (TVF) in SQL Server mithilfe von ALTER FUNCTION ändern T-SQL-Syntax.

Folgen Sie einfach ALTER FUNCTION mit der neuen Definition. Im Grunde ist es wie die Verwendung von CREATE FUNCTION außer Sie ersetzen CREATE mit ALTER .

Beispiel

Hier ist ein Beispiel zur Veranschaulichung:

ALTER FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) )
    RETURNS TABLE
    WITH SCHEMABINDING
AS
RETURN (
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats
    WHERE CatName = @CatName
    );

GO

Wenn diese Funktion noch nicht vorhanden wäre und ich sie zum ersten Mal erstellen würde, würde ich den folgenden Code verwenden:

CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) )
    RETURNS TABLE
    WITH SCHEMABINDING
AS
RETURN (
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats
    WHERE CatName = @CatName
    );

GO

Es ist genau dasselbe, außer dass es mit CREATE beginnt statt ALTER .

Drop and Recreate

Eine andere Möglichkeit besteht darin, die Funktion zu löschen und neu zu erstellen:

DROP FUNCTION IF EXISTS udf_CatsByName_ITVF;
GO

CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) )
    RETURNS TABLE
    WITH SCHEMABINDING
AS
RETURN (
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats
    WHERE CatName = @CatName
    );

GO

In diesem Fall habe ich die DIE-Syntax (Drop If Exists) verwendet, was bedeutet, dass ich keine Fehlermeldung erhalte, wenn das Objekt nicht bereits existiert, bevor ich versuche, es zu löschen.

Inline-TVFs vs. TVFs mit mehreren Anweisungen

Die Beispiele auf dieser Seite verwenden eine Inline-Tabellenwertfunktion. Dasselbe Konzept gilt für TVFs mit mehreren Anweisungen.

Siehe Erstellen einer Inline-Tabellenwertfunktion und Erstellen einer Multi-Statement-Tabellenwertfunktion für detailliertere Beispiele für jede dieser Funktionen.