在Sql Server中如何使where子句是可选的?

时间:2016-12-15 12:00:58

标签: sql sql-server stored-procedures

我有一种情况,比如用户会搜索记录,他们会在where子句中给出条件。所以他们可能会给出条件,也可能不会。所以在这个标准中如何进行查询。

例如,用户可以搜索所有记录。有时他们可能会搜索日期之间。因此,如何查询Date的列字段是可选的。

这是我的查询

melt(setDT(mydata), 
     measure = measure_list, 
     value.name = measurenames,
     variable.name = "measure")
#    ID measure ZA BB
# 1:  1       1  1  3
# 2:  2       1  2  3
# 3:  3       1  3  3
# 4:  4       1  4  3
# 5:  5       1  5  3
# 6:  1       2  5  6
# 7:  2       2  4  6
# 8:  3       2  3  6
# 9:  4       2  2  6
#10:  5       2  1  6

此处,用户可能会搜索年份= 2015,或者他们可能无法搜索。那我该怎么办呢。

1 个答案:

答案 0 :(得分:2)

当您没有搜索累积到年份时,请将NULL传递给日期参数,并在WHERE子句中添加OR条件@Year {{1 }}

IS NULL

如果年份未经过硬编码,请将其传递给declare @year INT=2015 select transactions.storeid as StoreID, MONTH(transactions.Time) Month, transactionsEntry.TransactionNumber,transactionsEntry.Quantity, items.ItemLookupCode,items.DepartmentID,items.CategoryID,items.SubDescription1, suppliers.SupplierName,suppliers.Code FROM [HQMatajer].[dbo].[Transaction] as transactions RIGHT JOIN [HQMatajer].[dbo].[TransactionEntry] as transactionsEntry ON transactions.TransactionNumber=transactionsEntry.TransactionNumber INNER JOIN [HQMatajer].[dbo].[Item] as items ON transactionsEntry.ItemID=items.ID INNER JOIN [HQMatajer].[dbo].[Supplier] as suppliers ON items.SupplierID=suppliers.ID where (YEAR(transactions.Time)=@year OR ISNULL(@year,'')='') and transactions.TransactionNumber='5526499' and items.ItemLookupCode='806077P0001' and transactions.StoreID='2001' 变量并在查询中使用。

<强>更新

如果您想将其与逗号分隔的字符串进行比较,请将@year声明为@year,如

varchar(100)declare @year INT=2015

然后更改where条件,如:

declare @year VARCHAR(100)='2014,2015'

以上查询将检查交易年份是否存在于@year中,并相应地显示结果。

注意:根据您的需要指定varchar的大小,这样可以提高性能。