私はウェブサイトで使用されるクエリを書いています。クエリが必要になると、サーバーに直接解析され、結果はすべてクエリによって制御されます。ウェブサイトはテーブルを返すだけです。私がサイトに持っているのは、クライアントが選択できるチェックボックスであり、それらはまたはのいずれかとしてクエリに解析され@var = 1
ます@var = 0
。そのため、現在、このコードをチェックして追加するかどうかは、チェックされているかどうかによって異なります。私の質問は、IF
これを含むコードのいくつかのセクションがあるので、このようなステートメントを使用するよりも、これを実行するためのより良い方法がありますか?
SET @sql = 'select distinct '
If @mgchk = 1
SET @sql = @sql + 'p.MainGroup'
If @sgchk = 1 and @sql = 'select distinct '
SET @sql = @sql + 'p.SubGroup'
If @sgchk = 1 and @sql not like '%SubGroup'
SET @sql = @sql + ',p.SubGroup'
If @ssgchk = 1 and @sql = 'select distinct '
SET @sql = @sql + 'p.SubSubGroup'
If @ssgchk = 1 and @sql not like '%SubSubGroup'
SET @sql = @sql + ',p.SubSubGroup'
If @Seasonchk = 1 and @sql = 'select distinct '
SET @sql = @sql + 'p.Season'
If @Seasonchk = 1 and @sql not like '%Season'
SET @sql = @sql + ',p.Season'
If @vendorchk = 1 and @sql = 'select distinct '
SET @sql = @sql + 'p.VendorID'
If @vendorchk = 1 and @sql not like '%VendorID'
SET @sql = @sql + ',p.VendorID'
SET @sql =
@sql +
' into
##aa
from
RPProducts p,
RPIv i,
RPTrsd d,
RPTrs s
WHERE
s.StoreID = d.StoreID and
s.ReceiptNO = d.ReceiptNO and
i.UPC = d.UPC and
i.StoreID = d.StoreID and
i.IVProduct = p.Productid and
s.TRSdate >= '''+ convert(varchar(10), @trsfrom, 101) +''' and
s.TRSdate <= '''+ convert(varchar(10), @trsto, 101) +''''
execute sp_executesql @sql
@mgchk / @sgchk / @ssgchk / @seasonchk/@vendorchkはチェックボックス変数です
@Aaronに答えるには、
動的クエリによるグローバル温度。クエリ全体が処理され、データがプルされるとすぐにドロップされます。そこで衝突は発生しません。
私の日付変数はdatetime
そうです、そしてそれは私に動的SQL内のエラーを与えます。
はい、チェックするよりも使用するのに良いものがある場合は、チェックするために同じことを思い出してください。これがこの質問全体の理由ですIF
。
そして、エイリアス結合を使用する方が簡単だと思います...