Posts

Showing posts from June, 2008

Operatorul APPLY in SQL 2005

CREATE TABLE dbo.Items ( ID int IDENTITY(1,1) NOT NULL, Name varchar(50) NOT NULL, CONSTRAINT PK_Items PRIMARY KEY (ID ASC) ) -- Ceva valori GO INSERT INTO Items VALUES ('X') INSERT INTO Items VALUES ('Y') INSERT INTO Items VALUES ('Z') -- O functie care returneaza itemurile care au id-ul mai mic decat @ItemID (cele anterioare unui anumit item) GO CREATE FUNCTION [dbo].[getPreviousItems] ( @ItemID int ) RETURNS @PreviousItemTab TABLE ( ID int, Name varchar(50) ) AS BEGIN INSERT INTO @PreviousItemTab SELECT * FROM dbo.Items AS i WHERE i.ID < @ItemID RETURN END Operatorul APPLY implica doi operanzi, primul operand (LEFT) actioneaza ca si input pentru cel de-al doilea (RIGHT). Pentru fiecare linie din rezultatul operandului LEFT se va evalua operandul RIGHT Operatorul APPLY e de doua tipuri: CROSS APPLY si OUTER APPLY. Rezultatul lui CROSS APPLY nu va include liniile pentru care LEFT returneaza NULL in urma evaluarii, iar OUTER APPLY va include si