【发布时间】:2014-04-17 20:03:27
【问题描述】:
我正在尝试编写一个存储过程,其中 where 子句需要根据传递给过程的参数是动态的。
根据是否将空字符串传递给 StartDate 和 EndDate,ContractDate 条件选择行。如果它们是空字符串,则用户将传递一个日期列表(假设),我需要选择与列表中的 ContractDates 相同的行。如果 @StartDate 和 @EndDate 参数不是空字符串,我会选择 ContractDate >= @StartDate 和
select TermDescription,ContractDate,Price,SortOrder into #tbtp from BaseTermPrice
inner hash join Term
on
Term.TermID = BaseTermPrice.TermID
where
BaseID = @BaseID and PeakType = @PeakType and
case when @StartDate != '' and @EndDate != ''
then
ContractDate >= @StartDate and ContractDate <= @EndDate
else
ContractDate in (@DateList)
end
order by
ContractDate,SortOrder
【问题讨论】:
-
"
string is passed to StartDate and EndDate" 为什么要对名为 StartDate 和 EndDate 的字段使用字符串?这是处理日期信息的一种糟糕的方式。 -
是的。理想情况下,我想传递空值或实际日期。如何在 SQL 中将参数等同于 null。我习惯于容易等同于空值的编程语言。我对 SQL 比较陌生,无法弄清楚您如何将某些内容等同于 null?
-
这取决于您使用的客户端语言和平台。
-
我使用 C# 作为客户端语言,很容易传递空值。但是当调用存储过程时,我应该传递 DBNull 还是只传递 null?如何在 T-SQL 中验证 null 值?
标签: sql sql-server