[英]SQL query invalid column name
我有以下查詢
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
我想按類別顯示以下查詢的數據,這些值具有:Monitor,LCD和Desktop。 我把問題放在“哪里blablabla”
我有2個條件,我嘗試過。
第一個條件 :
從我在用值聲明@category時顯示的代碼獲取錯誤
“無效的列名監視器”
“無效的列名LCD”
“無效的列名桌面”
第二條件 :
我為
where category IN ('''+@category+''')
如果我僅添加一個值,則它起作用,但是如果我聲明@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 + ' )
謝謝
您必須從以下位置更改@category變量:
DECLARE @category VARCHAR(50) = 'monitor,LCD,Desktop'
至:
DECLARE @category VARCHAR(50) = '''monitor'',''LCD'',''Desktop'''
然后,當您在編寫時在@sql中使用@category時,它也將為您工作:
where category IN ('+@category+')
謝謝@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)中選擇拆分)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.