sql >> Databasteknik >  >> RDS >> Sqlserver

Skicka tabell som parameter till SQL Server UDF

Du kan dock inget bord. Från dokumentation:

För Transact-SQL-funktioner är alla datatyper, inklusive användardefinierade CLR-typer och användardefinierade tabelltyper, tillåtna förutom tidsstämpeldatatypen.

Du kan använda användardefinierade tabelltyper .

Exempel på användardefinierad tabelltyp:

CREATE TYPE TableType 
AS TABLE (LocationName VARCHAR(50))
GO 

DECLARE @myTable TableType
INSERT INTO @myTable(LocationName) VALUES('aaa')
SELECT * FROM @myTable

Så vad du kan göra är att definiera din tabelltyp, till exempel TableType och definiera funktionen som tar parametern av denna typ. En exempelfunktion:

CREATE FUNCTION Example( @TableName TableType READONLY)
RETURNS VARCHAR(50)
AS
BEGIN
    DECLARE @name VARCHAR(50)

    SELECT TOP 1 @name = LocationName FROM @TableName
    RETURN @name
END

Parametern måste vara READONLY. Och exempelanvändning:

DECLARE @myTable TableType
INSERT INTO @myTable(LocationName) VALUES('aaa')
SELECT * FROM @myTable

SELECT dbo.Example(@myTable)

Beroende på vad du vill uppnå kan du ändra denna kod.

EDIT: Om du har data i en tabell kan du skapa en variabel:

DECLARE @myTable TableType

Och ta data från din tabell till variabeln

INSERT INTO @myTable(field_name)
SELECT field_name_2 FROM my_other_table


  1. WIDTH_BUCKET() Funktion i Oracle

  2. Hur anropar man en lagrad procedur i ett orakelpaket med Entity Framework?

  3. Programgranskning – Stellar Repair för MS SQL

  4. SQL FLOAT:3 poäng som hjälper dig att undvika konstiga matematiska fel