SQL Server 2008では、varchar(20)である変数@storenameがあり、次のステートメントがあります。
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句をすべてのStoreIDまたは@storenameのいずれかに設定しようとしています。そこにIFまたはcaseステートメントを入れることはできますか?
and r.StoreID = * or r.StoreID = @storename
where句でワイルドカードを使用するようなものはありますか?
現在のところ、私は試しました:
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
また、試した
declare @storename varchar(20)
set @storename = '01'
and r.storeid = '''+@storename+'''
これは機能し、ストア01からすべてを返しますが、
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