Sybase: хранимая процедура вызывается из другой хранимой процедуры слишком медленно

Вместо использования StackPanel используйте UniformGrid

Предоставляет способ размещения контента в сетке, где все ячейки в сетке имеют одинаковый размер.

и привязать число столбцов к числу элементов в списке и отключить функцию горизонтальной прокрутки.

<ListBox 
   ...
   ItemsSource="{Binding AllItemsList}" 
   ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
   ScrollViewer.VerticalScrollBarVisibility="Disabled" >
   <ListBox.ItemsPanel>
      <ItemsPanelTemplate>
         <UniformGrid Rows="1" Columns="{Binding AllItemsList.Count}"/>
      </ItemsPanelTemplate>
   </ListBox.ItemsPanel>
   <ListBox.ItemContainerStyle>
      <Style TargetType="{x:Type ListBoxItem}">
         <!-- style -->
      </Style>
   </ListBox.ItemContainerStyle>
</ListBox>
0
задан Space Cadet 16 January 2019 в 11:06
поделиться

1 ответ

Удалось найти гораздо лучшее решение проблемы, не пробираясь сквозь стол. Я думал, что опубликую решение здесь для любого, кто может столкнуться с подобной проблемой.

Требование для хранимой процедуры состояло в том, чтобы проходить по большой таблице по одной строке за раз, объединяя содержимое каждого столбца в строке в строку и назначая ее переменной. Каждые N строк этой переменной будут записаны в отдельную таблицу. Ранее я использовал курсор для этого, но разработчик в нашей команде обнаружил гораздо более быстрый способ, используя предложение WITH.

INSERT INTO <MY_SCHEMA>.<MY_TABLE_THAT_WILL_CONTAIN_THE_CONCATENATED_VALUES_OF_EVERY_N_ROWS>
WITH 
    CONCATENATE_ROWS AS (
            SELECT RANK() OVER (ORDER BY <PRIMARY_KEY_COLUMN>) AS ROWID, <PRIMARY_KEY_COLUMN>, <COLUMN_1> || '' || <COLUMN_2> || '' || ... <COLUMN_N> AS ROW_DETAIL
            FROM <MY_TABLE_THAT_I_AM_QUERYING> 
            ORDER BY <PRIMARY_KEY_COLUMN>
    ), 
    GROUPED_ROWS AS (
            SELECT (((CONCATENATE_ROWS.ROWID-1)/ <number of rows I want to concatenate, e.g.: 10>)+1) AS GROUPID, CAST(LIST(CONCATENATE_ROWS.ROW_DETAIL, '' ORDER BY <PRIMARY_KEY_COLUMN>) AS VARCHAR(4000)) AS CONCAT_DETAILS
             FROM CONCATENATE_ROWS 
             GROUP BY (((CONCAT_ORDERS.ROWID-1)/ <number of rows I want to concatenate, e.g.: 10>)+1)
    )
SELECT <Whatever columns I want to insert into <MY_TABLE_THAT_WILL_CONTAIN_THE_CONCATENATED_VALUES_OF_EVERY_N_ROWS>> 
FROM GROUPED_ROWS;
0
ответ дан Space Cadet 16 January 2019 в 11:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: