Customer と orders という名前のデータベースに 2 つのテーブルがあります。私の ASP.NET ページには、これら 2 つのテーブルのフィールドを表すチェックボックスがあります。
ユーザーはチェックボックスから選択できます (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 列) が追加されています。これは、あまりにも多くのビット型変数を追加しているだけであり、これらのビット型変数をチェックして、ストアド プロシージャ内のビット型変数に基づいて @sql に連結する場合の条件です。これを達成するためのより良い方法はありますか?提案してください。