Что оператор WITH делает в этом примере? Я пытаюсь случайным образом генерировать данные

Не со строгим контролем типов.

Рассматривают то, что следующий прототип функции говорит Вам о типах данных аргументов:

void func (int n, char ch, ...);

Ничто. Таким образом, я предполагаю, что строгий контроль типов не применяется здесь.

5
задан Jon Seigel 4 March 2010 в 20:25
поделиться

4 ответа

Синтаксис WITH такой же, как при использовании локальной временной таблицы или встроенного представления. Насколько мне известно, он поддерживается только в SQL Server (2005+, называется Common Table Expressions) и Oracle (9i +, называется Subquery Factoring). Предполагаемое использование - создание базового представления, которое используется (т.е. присоединяется к) несколько раз в одном запросе.

Вот типичный пример:

WITH example AS (
     SELECT q.question_id,
            t.tag_name
       FROM QUESTIONS q
       JOIN QUESTION_TAG_XREF qtf ON qtf.question_id = t.question_id
       JOIN TAGS t ON t.tag_id = qtf.tag_id)
SELECT t.title,
       e1.tag_name
  FROM QUESTIONS t
  JOIN example e1 ON e1.question_id = t.question_id

... который вернет идентичные результаты, если вы используете:

SELECT t.title,
       e1.tag_name
  FROM QUESTIONS t
  JOIN (SELECT q.question_id,
               t.tag_name
          FROM QUESTIONS q
          JOIN QUESTION_TAG_XREF qtf ON qtf.question_id = t.question_id
          JOIN TAGS t ON t.tag_id = qtf.tag_id) e1 ON e1.question_id = t.question_id

Приведенный вами пример:

WITH fileUIDS(fileUID) AS ( 
     VALUES(1) 
     UNION ALL
     SELECT t.fileUID+1 
       FROM fileUIDS t
      WHERE t.fileUID < 1000 )
INSERT INTO files 
    (fileUID, filename)
SELECT f.fileUID,
       TRANSLATE ( CHAR(BIGINT(RAND() * 10000000000 )), 'abcdefgHij', '1234567890' )
  FROM fileUIDS f;

... рекурсивный. Он начинается с 1, всего генерируется 999 файловых идентификаторов (было бы 1000, если бы он начинался с 0).

16
ответ дан 18 December 2019 в 07:55
поделиться
WITH x AS (...)

Это примет вывод ... и временно рассматривать ее как таблицу с именем x .

WITH x AS (...)
SELECT * FROM x

Это утверждение по сути даст вам то же самое, что и ... выходы, но вместо этого будет ссылаться на таблицу x

4
ответ дан 18 December 2019 в 07:55
поделиться

Слово WITH используется для создания общего табличного выражения (CTE). В этом случае создается встроенная таблица, из которой часть «select fileUID, ...» извлекает данные.

0
ответ дан 18 December 2019 в 07:55
поделиться

Он создает CTE (общее табличное выражение). По сути, это таблица, которую вам не нужно создавать, удалять или объявлять. Он будет автоматически удален после запуска пакета.

Подробнее см. http://4guysfromrolla.com/webtech/071906-1.shtml .

0
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: