0

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
4

4 に答える 4

0

で動作するようにしました

およびr.storeidlike''%'+ @ storename +'%''

于 2013-02-06T21:58:20.767 に答える
0

いいえ、しかしあなたは試すかもしれません:-

AND ( @storename IS NULL OR r.StoreID = @storename )
于 2013-02-06T21:05:01.070 に答える
0

r.storeId = '+@storename+')

storeId は int で、 @storename は varchar であるため、それらを比較することはできません。

and r.StoreID like '+@storename+'

storeID は int であるため、LIKE を実行することはできません。

おそらく @storename を int にキャストするか、データベースをリファクタリングして、StoreID が varchar になるようにして一致させる必要があります。

于 2013-02-06T21:54:39.707 に答える
0

「すべてのレコード」を意味するためにNULLforを使用できます。@storename

declare @storenameComparisonValue varchar(50)
set @storenameComparisonValue =
        isnull(cast(replace(@storename, '''', '''''') as varchar(50)), 'null')
' ... and (' + @storenameComparisonValue + ' is null or r.StoreID = '''
        + @storenameComparisonValue + ''')
于 2013-02-06T21:05:23.500 に答える