2012-05-03 5 views
0

я следующий запрос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 

Я хочу показать данные из следующих запросов по категориям, которые имели значения: монитор, LCD и рабочий стол. И я вещь проблема в «WHERE blablabla»

У меня было 2 условия, которые я попробовал.

первое условие:

Из кода показал, когда я объявляю @category со значениями его получения ошибки

«Неверное имя колонки монитор»

«Неверное имя столбца ЖК»

«Недопустимое имя столбца« Рабочий стол »

второе условие:

я сделать изменения для

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 + ') 

Благодаря

+0

возможно дубликат [Параметрирование предложения SQL IN?] (Http://stackoverflow.com/questions/337704/parameterizing-an-sql-in-clause) – Pondlife

ответ

0

благодаря @st MnMn, но я был решить эту проблему

я использую функцию, которая разделить строку с separato г символ ""

поэтому вход для @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 ('', '', @ категории))

0

вам час пр изменить @category переменную из:

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

к:

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

, а затем она будет работать для вас также, если вы используете @category в вашем @sql, как Вы писали:

where category IN ('[email protected]+') 
+0

спасибо, но я решил эту проблему ... ответ, который я опубликовал, если я использую, где категория IN ('+ @ category +'). значения @category сначала должны быть преобразованы в мое приложение, я попробовал этот путь и получал больше времени. поэтому мое решение конвертируется в sql перед вызовом значений в моем приложении. – tyo

Смежные вопросы