Параметри та макроси є свого роду змінними в SQL-тексті. Вони збільшують гнучкість при виконанні запитів, дозволяючи (без зміни тексту) змінювати запит безпосередньо перед його виконанням. Вони отримують значення безпосередньо перед виконанням запиту або від користувача, або через параметри командного рядка, або зі звіту (якщо запит відкривається зі звіту), або ж можуть бути вираховані автоматично, якщо вони є наперед визначеними (див. нижче). Макроси - це завжди текстові змінні; вони замінюються в SQL-тексті своїми значеннями перед виконанням запиту. На відміну від макросів, параметри мають тип; їх значення і типи передаються серверу, а не вставляються в SQL-текст. Макроси і параметри всередині коментарів і рядкових літералів ігноруються програмою, але все-таки не рекомендується включення параметрів всередині коментарів, особливо для підключень ADO. Хоча іноді макроси зручніші від параметрів, використання параметрів має певні переваги, як з точки зору протидії SQL injection, так і оптимізації виконання запиту.

Якщо параметр чи макрос не є наперед визначеним і не заданий в командному рядку або звіті, то програма пропонує користувачу ввести значення в окремому вікні.

Макроси починаються з << і закінчуються >>. Їх головне призначення: динамічна заміна при виконнані запиту з командного рядка. Текст макросу може містити тільки букви, цифри і знак підкреслювання. Наступний SQL приклад містить макрос CUST_TYPE_LIST:

SELECT *
FROM payments
WHERE customertype in (<<CUST_TYPE_LIST>>)

Значенням для такого макросу може бути, наприклад, такий текст:

3, 8, 12, 5

Зауважте, що подібний результат неможливо отримати з використанням параметрів.

Параметри починаються з двокрапки. Параметри, що містять пробіли, повинні братися в одинарні лапки. Параметричні запити зручні тим, що один і той же SQL-вираз можна використовувати для різних даних, які будуть підставлятися тільки на етапі виконання. Наступний SQL приклад містить параметр DATE:

SELECT *
FROM payments
WHERE paydate = :DATE

При виконанні такого запиту програма пропонує ввести значення параметру і його тип даних, після чого продовжує виконання. Для зручності вводу параметрів, щоб тип даних параметру вибирався автоматично, достатньо в SQL-виразі відразу за параметром в окремому коментарі вказати тип параметра, як в наступному прикладі:

SELECT *
FROM orders
WHERE orderno < :ORDERNO /* ParamType=Integer */

Є кілька наперед визначених параметрів, які заповнюються програмою автоматично:

<<SYSTEM_DATE>>Заміняються поточною датою (з типом Date)
<<SYSTEM_DATETIME>>Заміняються поточними датою і часом (з типом DateTime)
<<SYSTEM_TIME>>Заміняються поточним часом (з типом DateTime)
<<SYSTEM_YEAR>>Заміняються поточним роком (з типом Integer)
<<SYSTEM_MONTH>>Заміняються поточним місяцем (з типом Integer)
<<SYSTEM_DAY>>Заміняються поточним днем (з типом Integer)

Якщо наперед визначений параметр починається не з двокрапки, то він інтерпретується як наперед визначений макрос. У випадку цілочисельних даних результат буде одинаковий, але для інших типів даних можуть бути проблеми, тому краще не плутати макроси та параметри.

Див. також