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 RIGHTOperatorul 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 aceste linii, pentru care evalua…