Не со строгим контролем типов.
Рассматривают то, что следующий прототип функции говорит Вам о типах данных аргументов:
void func (int n, char ch, ...);
Ничто. Таким образом, я предполагаю, что строгий контроль типов не применяется здесь.
Синтаксис 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).
WITH x AS (...)
Это примет вывод ...
и временно рассматривать ее как таблицу с именем x
.
WITH x AS (...)
SELECT * FROM x
Это утверждение по сути даст вам то же самое, что и ...
выходы, но вместо этого будет ссылаться на таблицу x
Слово WITH используется для создания общего табличного выражения (CTE). В этом случае создается встроенная таблица, из которой часть «select fileUID, ...» извлекает данные.
Он создает CTE (общее табличное выражение). По сути, это таблица, которую вам не нужно создавать, удалять или объявлять. Он будет автоматически удален после запуска пакета.
Подробнее см. http://4guysfromrolla.com/webtech/071906-1.shtml .