ahmed_sa Ответов: 1

Как выполнить запрос ниже, не используя оператор exec ?


я работаю на SQL server 2012
Мне нужно запустить оператор без использования exec
это означает, что мне нужно запустить оператор без использования exec

Что я уже пробовал:

DECLARE @Columns as VARCHAR(MAX)
SELECT @Columns =
COALESCE(@Columns + ', ','') + QUOTENAME(FeatureName)
FROM
   (select distinct FT.FeatureName from [CustomerLocations].[ItemFeatures] ItemF
  inner join [CustomerLocations].FeatureTypes FT ON ItemF.FeatureId=ft.FeatureId
   ) AS B
   ORDER BY B.FeatureName

DECLARE @SQLs as VARCHAR(MAX)

SET @SQLs = 'SELECT ItemId,IPN,PartnerName,CustomerName,FeatureValue, ' + @Columns + '
FROM
(
  select F.ItemId,i.IPN,i.PartnerName,i.PartnerPart,it.CustomerName,t.FeatureName,f.FeatureValue from #ItemFeatures It 
 inner join [CustomerLocations].[ItemFeatures] F on f.CustomerId=it.CustomerId  
 left join [CustomerLocations].[Items] I on i.ItemID=f.ItemId
 left join CustomerLocations.FeatureTypes T on t.FeatureId=f.FeatureId
) as PivotData
PIVOT
(
   COUNT(F.ItemId)
   FOR FeatureName IN (' + @Columns + ')
) AS PivotResult
ORDER BY ItemId'

EXEC(@SQLs)

1 Ответов

Рейтинг:
2

Richard Deeming

Вы не можете создать динамический свод без использования динамического SQL. А это значит, что вы должны использовать EXEC.

Вы могли бы потенциально использовать процедуры sp_executesql[^] если бы у вас были параметры для передачи. Но вы не можете передать имена сводных столбцов в качестве параметров.

Единственным другим вариантом было бы, чтобы ваш запрос возвращал необработанные данные, а приложение выполняло сводку в коде.


CHill60

Опереди меня! 5 б

ahmed_sa

вы можете мне помочь
мне нужно запустить инструкцию as select
посмотрим, как это сделать
Объявить @столбцов типа varchar(Макс)
выбранный столбец =
COALESCE(@Columns + ', ',") + QUOTENAME(FeatureName)
ОТ
--отчетливый фут.Имя_компонента
(выбрать различные фута.Имя_компонента от #ввод данные подвиг внутреннее соединение #особенности торговая ItemF
на ItemF.CustomerId=Feat.CustomerId INNER join #FeatureType FT on ItemF.Идентификатор_компонента=футов.Идентификатор_компонента

) КАК Б
Того, Б. Имя_компонента

Выберите ItemCode, IPN,PartnerName,CustomerName, ' + @Columns + '
ОТ
(
выберите F. Itemid и Ф. Itemid свойства как артикул,И. ИПН И. PartnerName,И. PartnerPart,гр.CustomerName,Т.Имя_компонента от #ввод данные ИТМ
внутреннее соединение #особенности торговая Ф на Ф. Кодклиента=ИТМ.Кодклиента
внутреннее соединение #товары, которые я на И. атрибут Itemid=Ф.Идентификатор элемента
внутреннее соединение #FeatureType T на T. FeatureId=F.Идентификатор_компонента
внутреннее соединение #customers c on c.CustomerID=F.атрибут CustomerID
) как сводные данные
СТЕРЖЕНЬ
(
Граф(ItemId)
Для FeatureName IN (' + @Columns + ')
) Как PivotResult
Заказ по имени пользователя

Richard Deeming

Как я уже сказал, Вы не можете.

Вы не можете запустить динамический свод без динамического SQL. Что означает использование EXEC или sp_executesql.

Если вы не хотите этого делать, то верните необработанные данные из вашего запроса и выполните сводку в коде.

ahmed_sa

но я столкнулся с проблемой на этой линии
В имя_компонента (' + @колонок + ')