SQL-сервер имя столбцов в качестве переменных - PullRequest
0 голосов
/ 24 марта 2009

У меня есть следующее утверждение в хранимой процедуре. Я передаю имя столбца в качестве параметра, а также значение для проверки в другой переменной. Возможно ли сделать это на сервере SQL. Пожалуйста, дайте мне знать.


        SELECT CaseId FROM app_Case 
        where @SearchCat=@keywords
        ORDER BY CreatedDate DESC  

Ответы [ 3 ]

2 голосов
/ 24 марта 2009

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

е

WHERE (cola = @cola OR @cola IS NULL) AND (colb = @colb OR @colb IS NULL) etc.
1 голос
/ 24 марта 2009

Вы можете построить динамический запрос. По сути, вы строите строку и затем выполняете ее. (Остерегайтесь атак с использованием SQL-инъекций).

Другой подход заключается в использовании оператора case, который, если у вас нет большого количества опций, стоит попробовать:

select CaseId from app_Case
where case when @searchCat='field1'
         then field1 
         else @searchVal 
      end = @searchVal and
      case when @searchCat='field2' 
         then field2 
         else @searchVal 
      end = @searchVal

Другой подход состоит в том, чтобы сделать то же самое с помощью или предложений:

   select CaseId from app_Case
   where (@searchCat='Field1' and Field1=@searchVal) OR
         (@serachCat='Field2' and Field2=@searchVal)
1 голос
/ 24 марта 2009

Вам нужно создать строку SQL внутри SP и выполнить ее.

Declare @SQL As VARCHAR(8000)

SET @SQL = 'SELECT CaseId FROM app_Case where ' + 
           @SearchCat + ' = '' + @keywords + 
           '' ORDER BY CreatedDate DESC'

EXEC(@SQL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...