Реферат: Новые возможности T-SQL в MS SQL Server 2005
DELETE FROM @StackTable WHERE Level = @Level AND ID = @CurrentID
INSERT @StackTable
SELECT BrandID, @Level + 1 FROM Brands WHERE ParentID = @CurrentID
IF @@ROWCOUNT > 0
SET @Level = @Level + 1
END
ELSE
SET @Level = @Level - 1
END
SELECT * FROM @OutputTable ORDER BY ID
Как видит читатель, код без использования виртуальных представлений более громоздкий и сложный для понимания. Несмотря на то, что подобный код несложно написать, весьма просто допустить досадную ошибку, на поиски которой может уйти много времени.
Кроме того, рекурсия с использованием виртуального представления значительно превосходит в производительности подход с использованием временных таблиц. Так, для тестового набора из ста тысяч записей в таблице Brands, время выполнения кода с использованием виртуального представления оказалось в четыре раза меньше, чем время выполнения кода без использования оного. Примерно то же отношение получено и для меньших наборов данных.
Операторы EXCEPT и INTERSECT
Операторы EXCEPT и INTERSECT позволяют осуществить выборку данных, общих или различных для нескольких наборов данных. Синтаксис новых операторов абсолютно аналогичен оператору UNION.
Допустим, необходимо получить BrandID производителей, модели которых не присутствуют в таблице Products. Тогда, применив оператор EXCEPT следующим образом:
SELECT B.BrandID FROM Brands B EXCEPT SELECT P.BrandID FROM Products P |
можно достичь того же результата, что и при использовании оператора EXITS в комбинации с оператором отрицания NOT:
SELECT B.BrandID FROM Brands B WHERE NOT EXISTS (SELECT P.BrandID FROM Products P WHERE P.BrandID = B.BrandID) |
Аналогично, для того, чтобы получить BrandID производителей, чьи модели присутствуют в таблице Products. Можно использовать оператор INTERSECT:
SELECT B.BrandID FROM Brands B INTERSECT SELECT P.BrandID FROM Products P |
а можно и оператор EXIST без отрицания:
SELECT B.BrandID FROM Brands B WHERE EXISTS (SELECT P.BrandID FROM Products P WHERE P.BrandID = B.BrandID) |
либо же совсем привычный синтаксис INNER JOIN:
SELECT DISTINCT B.BrandID FROM Brands B К-во Просмотров: 548
Бесплатно скачать Реферат: Новые возможности T-SQL в MS SQL Server 2005
|