sql запрос

Динамические SQL запросы

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

Например, нужен запрос, в котором имя таблицы воспринимается как параметр (чтобы можно было его задавать). Синтаксически переменную в обычный sql запрос поставить нельзя. Вот как выглядит неправильный запрос:

DECLARE @TableName VarChar(200) --объявил переменную
SET @TableName = "Products" --присвоил ей значение
SELECT * FROM @TableName --выдаст ошибку

Синтаксически в поле FROM нельзя подставлять переменную. Чтобы избежать ошибки, надо этот запрос сделать динамическим.

Сама технология динамического запроса значит: сначала собираем SELECT, а потом его выполняем. Т.е. сначала собираем код (например, на языке sql), а потом его выполняем. Для этого используется команда EXECUTE. Вот как выглядит правильный пример:

DECLARE @TableName VarChar(200)
SET @TableName = "Products"
EXECUTE ('SELECT * FROM' + @TableName) --для сервера это просто строка

Т.к. сервер воспринимает наш код как строку, то туда можно ставить все, что угодно. А EXECUTE пытается сделать из этой строки работающий запрос и выполнить его.

То же самое можно проделать и с конструкцией PIVOT.




Добавить комментарий

Ваш e-mail не будет опубликован.