Implementieren Sie SQL CLR-Tabellenwertfunktionen
Posted: 07 Jan 2025, 05:44
Ich versuche, einige Regex-Funktionen für SQL mithilfe von CLR zu implementieren. Ich hatte keine Probleme damit, die Skalarfunktionen zu erstellen, aber ich habe mich bei dem Versuch, diese Tabellenwertfunktionen zu erstellen, im Kreis gedreht. Ich habe den Code so einfach wie möglich gekürzt, um zu sehen, was mir an der Struktur fehlt.
SQL-Funktionsdeklaration
Assembly-Importe in SQL funktionieren problemlos, da ich Skalarfunktionen aus der Assembly erstellen kann. Wenn ich versuche, die CREATE FUNCTION-Anweisung auszuführen, erhalte ich diese Fehlermeldung:
CREATE FUNCTION für „TestTVF“ ist fehlgeschlagen, weil T-SQL- und CLR-Typen für den Rückgabewert dies tun stimmt nicht überein.
Das ist nicht der Code, den ich möchte, aber selbst diese einfache Implementierung funktioniert bei mir nicht. Was mache ich falsch?
Code: Select all
[SqlFunction(
FillRowMethodName = nameof(FillRow)
)]
public static IEnumerable TestTVF(string a, string b, int c)
{
IEnumerable l = new List { 1, 2, 3, 4, 5, 6};
return l;
}
public static void FillRow(object o, out int test)
{
test = (int)o;
}
Code: Select all
CREATE FUNCTION dbo.TestTVF(@a NVARCHAR(MAX), @b NVARCHAR(MAX), @c INT)
RETURNS TABLE (
test INT
)
AS EXTERNAL NAME RegexSQLCLR.[RegexSQLCLR.RegexSQL].TestTVF
CREATE FUNCTION für „TestTVF“ ist fehlgeschlagen, weil T-SQL- und CLR-Typen für den Rückgabewert dies tun stimmt nicht überein.
Das ist nicht der Code, den ich möchte, aber selbst diese einfache Implementierung funktioniert bei mir nicht. Was mache ich falsch?