Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Пример от реалния живот, кога да използвате OUTER / CROSS APPLY в SQL

Някои употреби на APPLY са...

1) Топ N заявки на група (могат да бъдат по-ефективни за някои кардиналите)

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);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да избера от списък със стойности в SQL Server

  2. Как да премахнете пощенски акаунт в база данни от профил в SQL Server (T-SQL)

  3. Как мога да заключа един ред в SQL Server по начин, подобен на SELECT FOR UPDATE WAIT на Oracle?

  4. PHP извиква скрипт за архивиране на база данни на sqlserver, архивен файл е създаден и след това изтрит

  5. Настройка на SQL Server – всичко е за измерване