首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态where子句中的If或Case

动态where子句中的If或Case
EN

Stack Overflow用户
提问于 2013-02-07 05:02:22
回答 4查看 193关注 0票数 0

在SQL Server 2008上,我有一个变量@storename,它是一个varchar(20)和以下语句:

代码语言:javascript
复制
SET @query = 'select '+@result1+' '+@colsNull+' into ##tempz 
FROM
(SELECT '+@result2+'
FROM rpPay p LEFT JOIN RPTrs r ON p.ReceiptNo = r.receiptno LEFT JOIN Currencies c ON LEFT(p.paytype,1) = c.POSCurrency
WHERE r.trsdate >= '''+ convert(varchar(10), @startDate, 101) +''' 
AND r.trsdate <= '''+ convert(varchar(10), @endDate, 101) +''' 
) p
pivot
(sum(amount) FOR CurrencyDesc in('+@cols+')) piv'
execute(@query)

我正在尝试将where子句设置为all StoreID或@storename。我是否可以在其中包含IF或case语句或类似于

代码语言:javascript
复制
and r.StoreID = * or r.StoreID = @storename

在where子句中使用通配符有这样的事情吗?

现在我已经试过了:

代码语言:javascript
复制
declare @storename varchar(20)
set @storename = '01'

and ('+@storename+' is null or r.storeId = '+@storename+') -- Error : Conversion failed when converting the varchar value 'BK' to data type int.
and r.StoreID like '+@storename+' -- Returns no information, just blank table

我也试过了

代码语言:javascript
复制
declare @storename varchar(20)
set @storename = '01'
and r.storeid = '''+@storename+'''

它确实可以工作并返回存储01中的所有内容,但如果我将

代码语言:javascript
复制
set @storename = null -- Gives me invalid Object name for the temp table I'm using
set @storename = '' -- give back no results again, just empty table
EN

回答 4

Stack Overflow用户

发布于 2013-02-07 05:05:01

不,但你可以试试:-

代码语言:javascript
复制
AND ( @storename IS NULL OR r.StoreID = @storename )
票数 0
EN

Stack Overflow用户

发布于 2013-02-07 05:05:24

您可以使用@storenameNULL来表示“所有记录”。

代码语言:javascript
复制
declare @storenameComparisonValue varchar(50)
set @storenameComparisonValue =
        isnull(cast(replace(@storename, '''', '''''') as varchar(50)), 'null')
' ... and (' + @storenameComparisonValue + ' is null or r.StoreID = '''
        + @storenameComparisonValue + ''')
票数 0
EN

Stack Overflow用户

发布于 2013-02-07 05:54:40

r.storeId = '+@storename+')

storeId是一个整数,@storename是一个varchar,所以你不能对它们进行比较。

and r.StoreID like '+@storename+'

storeID是一个整数,所以你不能在它上面做喜欢的事情。

您可能需要将@storename转换为整型或重构您的数据库,这样StoreID就是一个varchar,所以它们是匹配的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14738724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档