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

Симулация на CONNECT BY PRIOR на Oracle в SQL Server

Стандартният SQL начин за изпълнение на рекурсивни заявки, както е реализиран напр. от IBM DB2 и SQL Server, е WITH клауза. Вижте тази статия за един пример за превод на CONNECT BY в WITH (технически рекурсивен CTE ) -- примерът е за DB2, но вярвам, че ще работи и на SQL Server.

Редактиране:очевидно оригиналният querant изисква конкретен пример, ето един от сайта на IBM, чийто URL вече дадох. Дадена е таблица:

CREATE TABLE emp(empid  INTEGER NOT NULL PRIMARY KEY,
                 name   VARCHAR(10),
                 salary DECIMAL(9, 2),
                 mgrid  INTEGER);

където mgrid препраща empid на мениджъра на служител , задачата е да получите имената на всички, които се отчитат пряко или косвено на Joan . В Oracle това е просто CONNECT :

SELECT name 
  FROM emp
  START WITH name = 'Joan'
  CONNECT BY PRIOR empid = mgrid

В SQL Server, IBM DB2 или PostgreSQL 8.4 (както и в SQL стандарта, за какво струва това;-), идеално еквивалентното решение е вместо това рекурсивна заявка (по-сложен синтаксис, но всъщност още повече мощност и гъвкавост ):

WITH n(empid, name) AS 
   (SELECT empid, name 
    FROM emp
    WHERE name = 'Joan'
        UNION ALL
    SELECT nplus1.empid, nplus1.name 
    FROM emp as nplus1, n
    WHERE n.empid = nplus1.mgrid)
SELECT name FROM n

START WITH на Oracle клаузата става първият вложен SELECT , основният случай на рекурсията, да бъде UNION ed с рекурсивната част, която е просто още един SELECT .

Специфичният вкус на SQL Server на WITH разбира се е документиран в MSDN, който също дава насоки и ограничения за използването на тази ключова дума, както и няколко примера.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Виртуални машини Azure за използване на SQL сървър

  2. Как да премахнете всички първични ключове от всички таблици в базата данни на SQL Server - SQL Server / TSQL урок, част 65

  3. Какви са ограниченията на SQL Server Compact? (Или - как се избира база данни, която да се използва на MS платформи?)

  4. 2 начина за създаване на таблица, ако тя не съществува в SQL Server

  5. Промяна на потребителски дефиниран тип в SQL Server