WedX - журнал о программировании и компьютерных науках

Создание запроса на выбор на основе выбранных флажков в asp.net в хранимой процедуре

У меня есть две таблицы в базе данных с именем «Клиент» и «Заказы». На моей странице ASP.NET у меня есть флажки, представляющие поля в этих двух таблицах. введите здесь описание изображения

Пользователь может выбрать из флажков (имя, имя элемента заказа является обязательным). На основе выбранных флажков мне нужно сгенерировать sql-запрос. Запрос будет возвращать результаты с примененным фильтром из раскрывающегося списка CustomerType, когда пользователь нажимает кнопку «Отправить».

Для этого я проверил, установлен ли флажок в моем коде, и передал его как битовый тип в моей хранимой процедуре. Моя хранимая процедура,

CREATE PROCEDURE [dbo].[GetCustomerDetails]     
@LastName BIT,
@Phone BIT,
@Email BIT,
@Quantity BIT,
@OrderedDate BIT,
@ReturnPolicy BIT,
@CustomerType nvarchar(40)  

КАК НАЧАТЬ УСТАНОВИТЬ NOCOUNT НА DELCARE @Sql NVARCHAR(4000)

SET @Sql='SELECT c.FirstName,o.OrderItemName'
IF @LastName =1
    BEGIN
        SET @Sql=@sql+'c.LastName,'
    END 
IF @Phone =1
    BEGIN
         SET @Sql=@sql+'c.Phone,'
    END 
IF @Email =1
    BEGIN
        SET @Sql=@sql+'c.Email,'
    END
IF @Quantity =1
    BEGIN
        SET @Sql=@sql+'o.Quantity,'
    END 
IF @OrderDate =1
    BEGIN
        SET @Sql=@sql+'o.OrderDate,'
    END 
IF @ReturnPolicy =1
    BEGIN
        SET @Sql=@sql+'o.ReturnPolicy'
    END

SET @sql=@sql +' ' +'from Customer c inner join Order o on c.CustomerId=o.CustomerID where c.CustomerType =' + '@CustomerType'

EXEC(@sql)

КОНЕЦ

Прямо сейчас многие дополнительные столбцы таблицы (30 столбцов) были добавлены в флажок на странице asp.net. Это просто добавление слишком большого количества переменных битового типа и условий для проверки этих переменных битового типа и объединения их с @sql на основе этих переменных битового типа в хранимой процедуре. Есть ли лучший способ сделать это? Пожалуйста, предложите.


  • Почему бы вам не написать встроенные запросы в таких случаях. Вы можете просто перебирать списки флажков и создавать запрос в самом цикле for 03.10.2012
  • Поскольку вы не используете эти проверенные поля в предложении where, почему вы не выбрали все столбцы из базы данных и не показываете только те поля, которые соответствуют проверенным? 03.10.2012
  • @ codingbiz, я тоже подумал о твоем подходе. В приведенном выше примере я показываю только один раскрывающийся список для фильтра (где условие), но в моем действительности их 5 или 6. В любом случае, ваша идея, кажется, обеспечивает более быстрое решение моей проблемы. Спасибо. 04.10.2012

Ответы:


1

Сначала создайте таблицу, давайте назовем ее фильтрами, имеющими 3 столбца, следующим образом:

1. filter varchar(100)
2. inputBit bit
3. condition (this can be any condition, may be date time or any incremental int)

теперь вставьте условия фильтра вместе с входными битами для всех столбцов: это будет выглядеть следующим образом:

c.LastName  1 11
c.Phone 1 11
c.Email 1 11
o.Quantity  1 11
o.OrderDate 1 11
o.ReturnPolicy  1 11

В приведенном выше примере я рассматривал условие как целое, и его значение для конкретного экземпляра равно 11, для следующего экземпляра это может быть что-то другое.

теперь используйте следующий запрос:

DECLARE @Sql NVARCHAR(4000)
declare @var1 varchar(100)
declare @var2 bit
SET @Sql='SELECT c.FirstName,o.OrderItemName'
declare cur_filtered_view cursor for
select filter,inputBit from filters where condition = 11
open cur_filtered_view
fetch next from cur_filtered_view into @var1,@var2
while @@fetch_status = 0
begin
if(@var2 = 1)
begin
    set @Sql = @Sql+','+@var1
end
fetch next from cur_filtered_view into @var1,@var2
end
close cur_filtered_view
deallocate cur_filtered_view
set @Sql = @Sql + ' from Customer c inner join Order o on c.CustomerId=o.CustomerID where c.CustomerType =' + '@CustomerType' 
exec (@Sql)

Теперь, если нужно добавить какие-либо новые фильтры, вам все равно придется передавать их в виде битов из внешнего интерфейса в Proc. Единственными обновлениями, которые потребуются после этого, является добавление строки для этих новых фильтров в таблицу фильтров и при каждом вызове процедуры вставка соответствующих значений в таблицу фильтров.

03.10.2012
  • Спасибо Приправленный. Я тоже попробую ваш подход. 04.10.2012
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]