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

Innerhalb einer Funktion kann nicht auf temporäre Tabellen zugegriffen werden

Sie können benutzerdefinierte Tabellentypen verwenden, um Ihr Problem zu lösen.

Sie erstellen einfach eine Tabellenvariable wie

CREATE TYPE [dbo].[yourTypeName] AS TABLE(
    [columeName1] [int] NULL,
    [columeName2] [varchar](500) NULL,
    [columeName3] [varchar](1000) NULL
)
GO

und Sie können diese Tabellenvariable in Ihrer Funktion wie

deklarieren
    CREATE FUNCTION [dbo].[yourFunctionName] 
( 
    @fnVariable1 INT ,
    @yourTypeNameVariable yourTypeName READONLY
) 
RETURNS VARCHAR(8000) 
AS 
BEGIN 

    SELECT .................
        FROM @yourTypeNameVariable 
        WHERE ........
    RETURN @r 
END 

In Ihrer Prozedur können Sie Ihren Tabellentyp wie

deklarieren
DECLARE @yourTypeNamevaribale AS yourTypeName 

Und Sie können Werte wie

in diese Tabelle einfügen
insert into @yourTypeNamevaribale (col,col,..)values(val,val,..)

Übergeben Sie dies an Ihre Funktion wie

dbo.yourFunctionName(fnVariable1 ,@yourTypeNamevaribale )

Bitte entscheiden Sie sich für diese Methode, danke