0

私は次の質問をしました

DECLARE @category VARCHAR(50) = 'monitor,LCD,Desktop' 
DECLARE @sql nvarchar(4000)

IF @category IS NOT NULL 
BEGIN
SELECT @sql = 'SELECT *, 
CASE 
    WHEN Aging > 90 THEN ''> 90'' 
    ELSE
        CASE 
            WHEN Aging > 60 THEN ''61-90''
            ELSE 
                CASE 
                    WHEN Aging > 30 THEN ''31-60''
                    ELSE ''<=30''
                END
        END
END AS AgingCat, Pct*100 AS Percentage FROM dbo.vwPartnerProductAging

where category IN ('+@category+') 
ORDER BY PartnerName, Category, [Description]'

END

exec sp_executesql @sql, N'@category VARCHAR(50) ', @category

次のクエリのデータを、モニター、LCD、デスクトップの値を持つカテゴリ別に表示したいと思います。そして、私は「WHEREblablabla」で問題を抱えています

私が試した2つの状態がありました。

最初の条件

値を使用して@categoryを宣言すると表示されるコードから、エラーが発生します

「無効な列名モニター」

「無効な列名LCD」

「無効な列名デスクトップ」

2番目の条件

変更します

where category IN ('''+@category+''') 

値を1つだけ追加すると機能しますが、@ categoryを複数の値で宣言すると、何も表示されず、エラーは表示されません。


「WHEREblablabla」に直接値を入力すると、正常に機能します。

作業条件

DECLARE @category VARCHAR(50) = 'monitor,LCD,Desktop' 
DECLARE @sql nvarchar(4000)

IF @category IS NOT NULL 
BEGIN
SELECT @sql = 'SELECT *, 
CASE 
    WHEN Aging > 90 THEN ''> 90'' 
    ELSE
        CASE 
            WHEN Aging > 60 THEN ''61-90''
            ELSE 
                CASE 
                    WHEN Aging > 30 THEN ''31-60''
                    ELSE ''<=30''
                END
        END
END AS AgingCat, Pct*100 AS Percentage FROM dbo.vwPartnerProductAging

where category IN (''Monitor'',''LCD'',''Desktop'') 
ORDER BY PartnerName, Category, [Description]'

END

exec sp_executesql @sql, N'@category VARCHAR(50) ', @category

変更したかった:

where category IN (''Monitor'',''LCD'',''Desktop'') 

に:

where category IN ( ' + @category + ' )

ありがとう

4

2 に答える 2

0

@category変数を次の場所から変更する必要があります。

DECLARE @category VARCHAR(50) = 'monitor,LCD,Desktop'

に:

DECLARE @category VARCHAR(50) = '''monitor'',''LCD'',''Desktop'''

そして、あなたが書いたようにあなたがあなたの@sqlで@categoryを使うときもそれはあなたのために働くでしょう:

where category IN ('+@category+')
于 2012-05-03T07:56:16.830 に答える
0

@st mnmnに感謝しますが、私はこの問題を解決しました

文字列を区切り文字「、」で分割する関数を使用しています

したがって、@ categoryの入力には、区切り文字「、」が付いた値が必要です。

入力例

@category= 'LCD,Monitor,Desktop'

私が使用する関数

FUNCTION [dbo].[Split] (@sep char(1), @s varchar(2000))
RETURNS table
AS
RETURN (
WITH Pieces(pn, start, stop) AS (
  SELECT 1, 1, CHARINDEX(@sep, @s)
  UNION ALL
  SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
  FROM Pieces
  WHERE stop > 0
)
SELECT pn,
  SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS split
FROM Pieces

)。

と私のストアプロシージャで:

...............ここでカテゴリIN(dbo.Split(''、''、@ category)からsplitを選択)

于 2012-05-04T06:01:00.800 に答える