我正在编写在网站上使用的查询。当需要查询时,它会直接解析到服务器,结果全部由查询控制。该网站只是返回表格。我在网站上拥有的是客户端可以选择的复选框,这些复选框被解析为查询中的@var = 1
or 或@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
检查更好的东西可以使用。
而且我发现使用别名连接更容易......