以下のストアドプロシージャは、日付チェックの2番目の部分のコメントを 'where'節でコメント解除すると、日付変換で爆発する渡されたキーワードがNULLまたは '111'であってもT-SQL 'AND'キーワードが短絡していないと思われます
私は、この動的where節のやり方の提案については何も言及していません。
何か助けていただきありがとうございます。
この男のブログに基づきALTER PROCEDURE [SurveyEngine].[GetPageOf_CommentsOverviewRowModel]
@sortColumn varchar(50),
@isASC bit,
@keyword varchar(50)
AS
BEGIN
declare @keywordType varchar(4)
set @keywordType = null
if ISDATE(@keyword) = 1
set @keywordType = 'date'
else if ISNUMERIC(@keyword) = 1
set @keywordType = 'int'
select c.CommentBatch BatchID, c.CreatedDate DateReturned, COUNT(c.CommentID) TotalComments
from SurveyEngine.Comment c
where (@keywordType is null)
or (@keywordType = 'date') --and c.CreatedDate = @keyword)
or (@keywordType = 'int' and (CONVERT(varchar(10), c.CommentBatch) like @keyword+'%'))
group by c.CommentBatch, c.CreatedDate
order by case when @sortColumn = 'BatchID' and @isASC = 0 then c.CommentBatch end desc,
case when @sortColumn = 'BatchID' and @isASC = 1 then c.CommentBatch end,
case when @sortColumn = 'DateReturned' and @isASC = 0 then c.CreatedDate end desc,
case when @sortColumn = 'DateReturned' and @isASC = 1 then c.CreatedDate end,
case when @sortColumn = 'TotalComments' and @isASC = 0 then COUNT(c.CommentID) end desc,
case when @sortColumn = 'TotalComments' and @isASC = 1 then COUNT(c.CommentID) end
END
興味があるかもしれません:http://stackoverflow.com/questions/206484/sql-switch-case-in-where-clause –
私は投稿前に確認しましたが、実際の問題は 'and'演算子が@keywordTypeが 'date'でないときに第2文が評価されないようにしてください。信じられないほど明白なものがなければならないが、私はそれを見ていない。 –
c.CraetedDateが日付であると仮定するか、または(@keywordType = 'date'とc.CreatedDate = Convert(DateTime、@ keyword))? –