簡體   English   中英

SQL查詢無效的列名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM