Создать таблицу как с

Я пишу sql-запрос, и у меня есть проблема, которую я не могу исправить.

Я пытаюсь это:

CREATE TABLE a
AS
WITH cteCandidates (Miejscowosc, Ulica, NrDomu, KodPocztowy)
  AS
  (
    SELECT Miejscowosc, Ulica, NrDomu, KodPocztowy
    FROM Gimnazja
    INTERSECT
    SELECT Miejscowosc, Ulica, NrDomu, KodPocztowy
    FROM SzkolyPodstawowe
  )
 Select
  e.Lp as 'Gimnazja',
  s.Lp as 'Szkoly Podstawowe'
FROM
  Gimnazja AS e
  INNER JOIN cteCandidates AS c
    ON e.Miejscowosc = c.Miejscowosc AND e.Ulica = c.Ulica AND e.NrDomu = c.NrDomu AND e.KodPocztowy = c.KodPocztowy
  INNER JOIN SzkolyPodstawowe s
        ON s.Miejscowosc = e.Miejscowosc AND s.Ulica = e.Ulica AND s.NrDomu = e.NrDomu AND s.KodPocztowy = e.KodPocztowy
        Order By 'Gimnazja'

И ошибки, которые я получаю:

Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'AS'.
Msg 319, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

И я не знаю, почему. Я думаю, что мой запрос правильный, но явно нет, и я не понимаю, почему.


person Jakub Dropia    schedule 24.02.2012    source источник
comment
Это SQL Server или Oracle? Похоже, вы пытаетесь применить синтаксис стиля Oracle (создать таблицу как) к SQL Server, что не сработает.   -  person MatBailie    schedule 24.02.2012
comment
Конечно. Ты прав. Я использую select into, и он работает.   -  person Jakub Dropia    schedule 24.02.2012


Ответы (3)


Возможно, вы хотите:

WITH cteCandidates (...)
SELECT
   e.Lp as 'Gimnazja',
   s.Lp as 'Szkoly Podstawowe'
INTO a                          -- < -- table created here
FROM
   Gimnazja AS e
   INNER JOIN ...;
person onedaywhen    schedule 24.02.2012
comment
Да. Виноват. Оно работает. Но теперь мне интересно, как я могу добавить в эту таблицу новый столбец, например: ID, который будет иметь числовой порядок строк. Это возможно? - person Jakub Dropia; 24.02.2012

Вы пытаетесь создать представление? Тогда бы работало...

person gbn    schedule 24.02.2012

CREATE TABLE используется для определения схемы таблицы. Ключевое слово WITH используется для определения извлечения данных CTE. Это две совершенно разные операции.

Если вам нужна таблица в вашем SQL, посмотрите http://msdn.microsoft.com/en-us/library/ms174979.aspx, чтобы увидеть синтаксис для его определения. Затем вы можете заполнить его INSERT, но маловероятно, что это будет CTE (см. ниже).

Обычно с CTE вам не нужно вставлять данные в таблицу; в выписке сразу после нее вы можете просто использовать полученные данные, поскольку таблица была временно определена и заполнена для вас автоматически.

CTE можно использовать для определения VIEW - см. Создание представления на основе иерархии / используется CTE для примера

person kaj    schedule 24.02.2012
comment
Зачем вам стол? Откуда ты это звонишь? Если CTE возвращает то, что вам нужно, вы можете просто сделать простой выбор из CTE после того, как вы его определили. Если вы ищете долгосрочное хранилище результатов cte, вставьте в таблицу выбор ‹имен столбцов› из cteCandidates. - person kaj; 24.02.2012