2016-06-03 14 views
0

Ich möchte gespeicherte Prozeduren oder Funktionen zum Auswerten von Ad-hoc-Abfragen oder Filtern erstellen. Ist es möglich, Funktionen oder gespeicherte Prozeduren mit Tabellenwerten zu erstellen?Verkettung Funktion/gespeicherte Prozeduraufrufe

Angenommen, wir haben:

CREATE TABLE TestTbl(
    Id UNIQUEIDENTIFIER PRIMARY KEY, 
    Name NVARCHAR(max), 
    Quantity INT) 

Mit einem entsprechenden benutzerdefinierten Tabellentyp:

CREATE TYPE TResult AS TABLE(
    Id UNIQUEIDENTIFIER, 
    Name NVARCHAR(max), 
    Quantity INT) 

Eine grundlegende alle Funktion auswählen:

CREATE FUNCTION Generator() 
RETURNS TABLE 
AS 
RETURN SELECT Id, Name, Quantity 
FROM TestTbl 

einige Filter, die einen TResult Parameter akzeptieren und mit dem ich die Suchanfrage des Benutzers zusammenstellen möchte, zB:

CREATE FUNCTION F1(
    @in TResult READONLY) 
RETURNS TABLE 
AS 
RETURN SELECT Id, Name, Quantity 
     FROM @In 
     WHERE Name LIKE '%h%' 

SELECT * FROM Generator() erzeugt die erwarteten Ergebnisse.
Wie kann ich etwas tun?

SELECT * 
FROM F1(Generator()) 

Antwort

1

Sie müssen eine Tabelle mit dem Typ TResult erstellen. Und danach diese Tabelle als Parameter übergeben.

SELECT * 
FROM F1(@tresulttable)