Динамические условия в предложении WHERE - PullRequest
4 голосов
/ 04 августа 2011

У меня есть хранимая процедура, и я хотел бы знать, возможно ли создать динамическое условие where на основе параметра.

Допустим, у меня есть этот запрос:

SELECT *
FROM tbl_Users

Теперь у меня есть параметр с именем @username, который я хотел бы использовать для создания динамического условия where (котороечерез мою программу может быть 1 или более условий).Чтобы добиться чего-то подобного, я использую следующее утверждение:

SELECT *
FROM tbl_Users
@username -- where this parameter might hold a condition string such as "Where usr_Username = 5 and usr_first_name like '%Frank%' etc

Возможно ли сделать что-то подобное?

Ответы [ 4 ]

5 голосов
/ 04 августа 2011

Для этого вам нужно разбить динамический sql.

он будет работать примерно так:

declare @sql varchar(max)

set @sql = '
    SELECT *
    FROM tbl_Users
    WHERE ' + @username

exec (@sql)
2 голосов
/ 04 августа 2011

Я не уверен, что понимаю вас, но если мое понимание верно, вы можете сделать следующее (ВНИМАНИЕ: инъекция уязвима)

DECLARE @SQL varchar(500) = 'SELECT * FROM tbl_users ' + @username

EXEC @SQL
1 голос
/ 04 августа 2011

Насколько я знаю, это не сработает. Вам нужно будет сгенерировать скрипт, который вы хотите выполнить, и использовать команду exec.

0 голосов
/ 28 августа 2014

Вы действительно не должны объединять ключевые слова и параметры SQL в одну строку, как показано в некоторых ответах выше, по причинам открытия дверей для SQL-инъекции (Oneиз участников фактически вызвал это. Это мудрое предупреждение!).

Вместо этого вы должны параметризовать ваш SQL и выполнить системный SP sp_executesql .

Очень хороший пример кода показан в этом Публикация StackOverflow .

...