SQL Server - Поворот с использованием значения переменной как минимум в двух выходах с использованием цикла - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть скрипт ниже, но выдает ошибку, утверждающую, что @currentsupplierno не определен.@currentsupplierno имеет проблему - это ошибка в запросе select from в @query части скрипта.

enter image description here

Когда я запускаю скриптЯ хотел добиться ниже.(Да, оба вывода с заголовком, потому что мои товарищи по команде должны копировать вывод отдельно, а не как одну таблицу.) Надеюсь, это вас не смущает.Я довольно новичок в SQL.

Кроме того, число поставщиков может увеличиться, поэтому оно не фиксировано для следующих двух.Добавьте к этому, я сохранил все номера поставщиков в массиве (потому что это супер вход), который используется для дальнейшей фильтрации таблицы, содержащей идентификаторы SupplierName, PeriodID и CalculatedDollars в приведенных ниже примерах данных.

enter image description here

с использованием приведенных ниже образцов данных:

enter image description here

while exists (select SupplierNo from @supplier)

BEGIN

declare @currentsupplierno int

select top 1 @currentSupplierno = SupplierNo
from @supplier
order by supplierNo ASC

declare @col nvarchar(max)
declare @query nvarchar(max)

select @col = STUFF(
        (select distinct ',', quotename(periodID) 
         from #WeeklySales
         order by 1,2
         for xml path (''), type).value('.', 'nvarchar(max)'),1,1,'')

set @query = 'select SupplierNo,SupplierName,' + @col + ' 
    into #WeeklySales
    from (select SupplierNo,SupplierName, periodID, CalculatedDollars from #WeeklySales WHERE supplierno = @currentsupplierno) sq pivot (sum(CalculatedDOLLARS) for periodID IN (' + @col + ')) pt' 

print @query
execute (@query)

delete from @supplier where supplierno = @currentsupplierno
end

1 Ответ

0 голосов
/ 26 февраля 2019

Используйте sp_executesql вместо execute(), чтобы иметь возможность передавать параметры в динамический запрос.

EXECUTE sp_executesql   
          @query,  
          N'@currentsupplierno int',  
          @currentsupplierno;
...