У меня есть две таблицы в базе данных с именем «Клиент» и «Заказы». На моей странице 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 на основе этих переменных битового типа в хранимой процедуре. Есть ли лучший способ сделать это? Пожалуйста, предложите.