我在数据库中有两个名为 Customer 和 orders 的表。在我的 ASP.NET 页面中,我有代表这两个表中的字段的复选框。
用户可以从复选框中进行选择(Firstname,OrderitemName 是强制性的)。根据选中的复选框,我需要生成一个 sql 查询。当用户按下提交按钮时,查询将返回从 CustomerType 下拉列表应用过滤器的结果。
为此,我检查了是否在我的代码中选中了该复选框,并将其作为位类型传递到我的存储过程中。我的存储过程是,
CREATE PROCEDURE [dbo].[GetCustomerDetails]
@LastName BIT,
@Phone BIT,
@Email BIT,
@Quantity BIT,
@OrderedDate BIT,
@ReturnPolicy BIT,
@CustomerType nvarchar(40)
AS BEGIN SET NOCOUNT ON 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)
结尾
现在,在 asp.net 页面的复选框中添加了许多额外的表格列(30 列)。这只是添加了太多位类型变量和 if 条件来检查这些位类型变量并根据存储过程中的那些位类型变量将其连接到 @sql。有没有更好的方法来实现这一点?请建议。