Используя таблицы Temp в SSIS

На самом деле аргументы конструктору не имеют к сохраненному как членские переменные объекта. Вот пример:

class NumberAsString {

   private String numAsStr;

   public NumberAsString(double number) {
      this.numAsStr = Double.toString(number);
   }

}

В этом примере, аргумент конструктора на самом деле не хранится нигде, но его значение необходимо для вычисления одних или нескольких членских значений переменных.

поведение Вы видели, где все аргументы хранятся непосредственно как членские переменные, довольно распространено. Специально для определенных видов классов, которые просто предоставляют методы "метода считывания" и "метода set" для их членских переменных (не предлагая функций вычисления или преобразования). В мире Java эти виды классов обычно упоминаются как "бобы". (Который, да, очень глупое имя.)

8
задан aaroncatlin 27 August 2014 в 23:22
поделиться

5 ответов

Благодаря ответу @Aran, а также паре сообщений, которые я нашел в обсуждениях Codeplex (см. http://wpf.codeplex.com/Thread/View.aspx?ThreadId=65069 ), мне удалось придумать набор стилей, который позволяет установить фон строки заголовка, не отказываясь от функциональности (стрелки сортировки, разделители и т. Д.).

Единственным исключением из этого правила является функция «выбор ячейки». DataGrid имеет свойство SelectionUnit , которому можно присвоить значение Cell, FullRow или CellOrRowHeader, но оно, похоже, не работает. Если я установил его на FullRow (который должен только выбирать всю строку независимо от того, где вы щелкаете по этой строке), он все равно визуально выбирает отдельные ячейки, когда вы нажимаете на них. На изображении ниже показан пример DataGrid (без применения стиля), где SelectionUnit = "FullRow" . Как видите, похоже, что выделена ячейка (строка G столбца Name). Поскольку в настоящее время мне не нужен выбор ячеек, я разработал свои стили для подавления этой темно-черной границы, которая появляется вокруг ячейки при щелчке по ней.

alt text http://img80.imageshack.us/img80/4757/datagriddefaultcellsele. jpg

Вот пример стилизованной DataGrid, отсортированной по убыванию по идентификатору. Как видите, рядом с меткой идентификатора появляется стрелка вниз, а размер столбца автоматически изменяется, чтобы освободить место для стрелки сортировки.

alt text http://img377.imageshack.us/img377/3836/ datagridcustomfixed.jpg

Вот еще один пример стилизованного DataGrid. Это сортируется по возрастанию по «Сохранено?». Обратите внимание, что заголовок центрирован, но по обеим сторонам остается достаточно места для стрелки сортировки.

alt text http://img203.imageshack.us/img203/5140/datagridcustomfixed2.jpg


Вот стили необходимо для достижения этого вида.

Кисти

В этих стилях есть несколько настроек кисти, все в форме Property = "{StaticResource Media _...}" . Я собираюсь пока опустить определения, потому что мне потребуется некоторое время, чтобы скомпилировать их все, но если кто-то заинтересован в дублировании точных цветов, которые я использовал, оставьте комментарий. в начале процедуры, которая скажет клиенту не обрабатывать строки когда он не выполняется поскольку во время синтаксического анализа SP нет временной таблицы, следовательно, при синтаксическом анализе столбец недоступен.

Наконец-то это заставило меня работать :)

8
ответ дан 3 November 2019 в 13:17
поделиться

Нет, это проблема с разрешениями. Это должно вам помочь:

http://support.microsoft.com/kb/933835

2
ответ дан 3 November 2019 в 13:17
поделиться

Если возникла ошибка пока вы находитесь в BIDS, решение ajdams не будет работать, поскольку оно применяется только к ошибкам, возникающим при запуске пакета из агента SQL Server.

Основная проблема заключается в том, что SSIS изо всех сил пытается разрешить метаданные. С его точки зрения, таблицы ## не существуют, так как они не могут возвращать метаданные для объекта на этапе перед выполнением. Поэтому вам нужно найти способ удовлетворить его требование, чтобы таблица уже существовала. Есть несколько решений:

  1. Не используйте временные таблицы. Вместо этого создайте рабочую базу данных и поместите в нее все свои объекты. Очевидно, это, вероятно, не сработает, если вы пытаетесь получить данные на сервере, на котором вы не находитесь. ta dbo похож на рабочий сервер, поэтому вы не можете полагаться на это решение.

  2. Используйте CTE вместо временных таблиц. Это работает, если ваш исходный сервер - 2005/2008. Это не поможет, если исходный сервер - 2000.

  3. Создайте таблицу ## в отдельной команде Execute SQL. Установите для свойства RetainSameConnection значение True. Установите для DelayValidation значение true для потока данных. Когда вы настраиваете поток данных, подделайте его, временно добавив поле SELECT TOP 0 = CAST (NULL AS INT) в начало хранимой процедуры, которая имеет идентичные метаданные для вашего окончательного вывода. Не забудьте удалить это из хранимой процедуры перед запуском пакета. Это также удобный прием для обмена данными временной таблицы между потоками данных. Если вы хотите, чтобы остальная часть пакета использовала отдельные соединения, чтобы они могли работать параллельно, тогда вам нужно создать дополнительное необщее соединение. Это позволяет избежать проблемы, поскольку временная таблица уже существует во время выполнения задач потока данных.

Вариант 3 достигает вашей цели, но он сложен и имеет ограничение, заключающееся в том, что вам нужно разделить команду create ## на другую хранимую процедуру. вызов. Если у вас есть возможность создавать хранимые процедуры на исходном сервере, у вас, вероятно, также есть возможность создавать другие объекты, такие как промежуточные таблицы, и это обычно лучшее решение. Это также помогает избежать возможных конфликтов в TempDB, что также является желательным преимуществом.

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

Вариант 3 достигает вашей цели, но он сложен и имеет ограничение, заключающееся в том, что вам нужно разделить команду create ## на вызов другой хранимой процедуры. Если у вас есть возможность создавать хранимые процедуры на исходном сервере, у вас, вероятно, также есть возможность создавать другие объекты, такие как промежуточные таблицы, и это обычно лучшее решение. Это также помогает избежать возможных конфликтов в TempDB, что также является желательным преимуществом.

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

Вариант 3 достигает вашей цели, но он сложен и имеет ограничение, заключающееся в том, что вам нужно разделить команду create ## на вызов другой хранимой процедуры. Если у вас есть возможность создавать хранимые процедуры на исходном сервере, у вас, вероятно, также есть возможность создавать другие объекты, такие как промежуточные таблицы, и это обычно лучшее решение. Это также помогает избежать возможных конфликтов в TempDB, что также является желательным преимуществом.

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

тогда у вас, вероятно, также есть возможность создавать другие объекты, такие как промежуточные таблицы, и это обычно лучшее решение. Это также помогает избежать возможных конфликтов в TempDB, что также является желательным преимуществом.

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

тогда у вас, вероятно, также есть возможность создавать другие объекты, такие как промежуточные таблицы, и это обычно лучшее решение. Это также помогает избежать возможных конфликтов в TempDB, что также является желательным преимуществом.

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

5
ответ дан 3 November 2019 в 13:17
поделиться

Вы можете использовать табличные переменные вместо временных таблиц. он будет работать

0
ответ дан 3 November 2019 в 13:17
поделиться

Из-за всех этих хлопот, я думаю, что это того не стоит. Создайте реальную таблицу в базе данных и усеките ее до/после загрузки. Если это для хранилища данных, то не имеет значения, будет ли у вас лишняя таблица или две. Это дает вам инструменты SSIS для проектирования и позволяет не беспокоиться о тонкостях временных таблиц.

Если вы хотите, чтобы все было отдельно, то просто создайте временные таблицы SSIS в отдельной схеме. Вы можете использовать разрешения, чтобы сделать эту схему невидимой для всех остальных пользователей.

CREATE SCHEMA [ssis_temp]

CREATE TABLE [ssis_temp].[tempTableName]
1
ответ дан 3 November 2019 в 13:17
поделиться
Другие вопросы по тегам:

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