Синтаксис 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).