Wikis > SQL Wiki > CROSS/OUTER APPLY

Es gibt zwei Formen von APPLY: CROSS APPLY und OUTER APPLY.
CROSS APPLY gibt nur Zeilen von der äußeren Tabelle zurück, die ein Resultset der Tabellenwertfunktion erstellen.
OUTER APPLY gibt sowohl Zeilen, die ein Resultset erstellen als auch solche Zeilen zurück, bei denen dies nicht der Fall ist.
Durch die Tabellenwertfunktion werden hierbei in den Spalten NULL-Werte erstellt.

SELECT emails.[ID],
       s.[Username],
       s.[Domain]
FROM [emails]
CROSS APPLY [EmailParse](emails.[EmailAddress]) s

CREATE FUNCTION EmailParse (@email varchar(1000))
RETURNS @t TABLE ([UserName] varchar(20),
                  [Domain]   varchar(20))
AS
BEGIN
	
  DECLARE @i int
  SET @i = charindex('@', @email, 1)

  IF (@i > 1)
     INSERT INTO @t VALUES (LEFT(@email, @i-1), SUBSTRING(@email, @i+1, 20))
  ELSE
     INSERT INTO @t VALUES (null,null)

  RETURN

END