कुछ APPLY
के लिए उपयोग करता है हैं...
1) शीर्ष एन प्रति समूह प्रश्न (कुछ कार्डिनैलिटी के लिए अधिक कुशल हो सकते हैं)
SELECT pr.name,
pa.name
FROM sys.procedures pr
OUTER APPLY (SELECT TOP 2 *
FROM sys.parameters pa
WHERE pa.object_id = pr.object_id
ORDER BY pr.name) pa
ORDER BY pr.name,
pa.name
2) बाहरी क्वेरी में प्रत्येक पंक्ति के लिए तालिका मान फ़ंक्शन को कॉल करना
SELECT *
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle)
3) कॉलम उपनाम का पुन:उपयोग करना
SELECT number,
doubled_number,
doubled_number_plus_one
FROM master..spt_values
CROSS APPLY (SELECT 2 * CAST(number AS BIGINT)) CA1(doubled_number)
CROSS APPLY (SELECT doubled_number + 1) CA2(doubled_number_plus_one)
4) स्तंभों के एक से अधिक समूह को अनपिवट करना
मान लें कि 1NF तालिका संरचना का उल्लंघन कर रहा है....
CREATE TABLE T
(
Id INT PRIMARY KEY,
Foo1 INT, Foo2 INT, Foo3 INT,
Bar1 INT, Bar2 INT, Bar3 INT
);
2008+ VALUES
. का उपयोग करने वाला उदाहरण वाक्य रचना।
SELECT Id,
Foo,
Bar
FROM T
CROSS APPLY (VALUES(Foo1, Bar1),
(Foo2, Bar2),
(Foo3, Bar3)) V(Foo, Bar);
2005 में UNION ALL
इसके बजाय इस्तेमाल किया जा सकता है।
SELECT Id,
Foo,
Bar
FROM T
CROSS APPLY (SELECT Foo1, Bar1
UNION ALL
SELECT Foo2, Bar2
UNION ALL
SELECT Foo3, Bar3) V(Foo, Bar);