Siehe unten stehende BeispielTabellenwertparameter Standardwert oder geben Inline
CREATE TABLE Test
(
CD varchar(10) not null
)
GO
INSERT INTO Test VALUES ('TEST')
GO
CREATE TYPE [CdTable] AS TABLE (CD varchar(10));
GO
CREATE FUNCTION TestTbl (@x varchar(10), @c CdTable READONLY)
RETURNS TABLE
AS
RETURN
SELECT t.CD
FROM test t
JOIN @c c ON t.CD = c.CD OR c.CD IS NULL
WHERE t.CD = @x
GO
DECLARE @tt AS CdTable;
INSERT INTO @tt VALUES ('TEST');
SELECT * FROM TestTbl('TEST', @tt);
DELETE FROM @tt;
INSERT INTO @tt VALUES (NULL);
SELECT * FROM TestTbl('TEST', @tt);
GO
CREATE FUNCTION TestNoTbl (@x varchar(10))
RETURNS TABLE
AS
RETURN
SELECT *
FROM TestTbl(@x, ????) --<<<< how do I pass inline @c parameter with only a single row set to NULL
GO
Ich möchte einen Weg, um herauszufinden, entweder zu:
- einen Standardwert der @c zuweisen Parameter
- gibt es inline in einer Hilfsfunktion
Ich finde keine Möglichkeit, dies zu tun. Jeder kann helfen?
P. S .: Ich bin mit Microsoft SQL Server 2012 (oder höher)
Dank Prdp, aber ich möchte entweder die Zeilen zurückgeben mit @c oder als a verbinden Sonderfall gibt alle Zeilen zurück. Wenn ich das tue, was Sie mir gesagt haben, filtert @c die Ergebnisse nicht mehr. – zpul
@zpul - Überprüfen Sie das Update –
Zwei Fragen: 1. Ist es möglich, TestTbl mit einer leeren Tabelle aufzurufen, ohne einen neuen Parameter zu deklarieren? 2. Die Abfrage in der Funktion wird sehr komplex, denken Sie, dass es eine Lösung gibt, die Code-Duplikation vermeidet? (vermeidet das Schreiben beider Abfragen zweimal eins mit dem JOIN und eins ohne) Vielen Dank im Voraus – zpul