我下面的查询SQL查询无效的列名
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 ('[email protected]+')
ORDER BY PartnerName, Category, [Description]'
END
exec sp_executesql @sql, N'@category VARCHAR(50) ', @category
我希望显示来自以下按类别查询其中有值的数据:显示器,液晶显示器和桌面。而我的问题在“WHERE blablabla”
我有2个条件我试了。
第一条件:
从代码表明当我声明@Category与值其得到错误
“无效列名监视器”
“无效列名LCD”
“无效的列名称桌面”
秒条件:
我为
where category IN ('''[email protected]+''')
改变它的工作原理,如果我只添加一个值,但如果我宣布@Category有多个值其没有显示任何东西,但没有错误
如果我把值直接放在“WHERE blablabla”它工作正常。
工作条件:
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 + ')
感谢
可能重复的[参数化SQL IN子句?](http://stackoverflow.com/questions/337704/parameterizing-an-sql-in-clause) – Pondlife