Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Integration servises  [new]
smoyk
Member

Откуда: Кемерово
Сообщений: 1057
Здравствуйте.
Забираю данные из флэтфайла, но перед вставкой нужно добавить третье поле - число 1. Подскажите, как это сделать?
2 фев 12, 14:15    [12019114]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
smoyk
Member

Откуда: Кемерово
Сообщений: 1057
Надо наверно уточнить, во флэт файле только 2 поля. Третье нужно добавить перед вставкой.
2 фев 12, 14:25    [12019234]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5118
дерайвед колумн
2 фев 12, 14:28    [12019283]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
smoyk
Member

Откуда: Кемерово
Сообщений: 1057
Дедушка,

Спасибо!)
2 фев 12, 14:35    [12019362]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
smoyk
Member

Откуда: Кемерово
Сообщений: 1057
Помогите еще пожалуйста.
Как выполнить запрос из файла в Execute SQL Task я разобрался, а можно ли взять оттуда параметр для выполнения запроса? Идеальным был бы вариант считать значение из файла в глобальную переменную, и использовать ее в запросе, только как это сделать?) Т.е. 2 вопроса: как считать значение из файла в переменную, и как использовать ее в запросе.

К примеру запрос
delete from t where id = 1
. Вот "1" и надо из файла извлечь и в запрос подставить. Я бы не заморачивался и выполнял этот запрос из файла, но значение "1" мне еще в других местах нужно)
Заранее спасибо.
3 фев 12, 12:03    [12025053]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5118
smoyk,
а конфигурационные файлы ssis пакета подойдут?
3 фев 12, 12:10    [12025132]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
smoyk
Member

Откуда: Кемерово
Сообщений: 1057
Дедушка,

Да, подходят, благодарю за подсказку)... Прочитал, сделал. Теперь у меня есть нужное значение в переменной из конфигурационного файла, но не могу сообразить как эту переменную в запрос подставить в Execute SQL Task...
3 фев 12, 12:33    [12025395]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
smoyk
Member

Откуда: Кемерово
Сообщений: 1057
Все, разобрался) Имя должно быть числом и указывается через вопросик... нетривиально имхо.
3 фев 12, 13:17    [12025899]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
автор
Все, разобрался) Имя должно быть числом и указывается через вопросик... нетривиально имхо.

это если соединение типа OLEDB
если использовать ADO.NET, то используются именованные параметры
3 фев 12, 13:20    [12025941]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
smoyk
Member

Откуда: Кемерово
Сообщений: 1057
HandKot,

Да, конешно, я и имел ввиду для моего случая с oledb.
3 фев 12, 13:27    [12026017]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
smoyk
Member

Откуда: Кемерово
Сообщений: 1057
С конфигурационными файлами не все понятно... походу значение из файла береться 1 раз, перед запуском пакета. Я меняю значение в этом файле во время выполнения пакета, а значение переменной походу не меняется. Это мой гон или так должно быть?

Кроме того путь до файла при объявлении и привязки к нему переменной статичный, т.е. его нельзя через переменную задать, что есть плохо. Т.к. у меня несколько таких файлов в разных папках, и я хотел бы брать из них значения по очереди в 1 и ту же переменную. Но походу такого сделать нельзя. Из-за этого наверно придется поискать другой путь.
3 фев 12, 14:30    [12026699]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
ну тогда начнем с начала
автор
Помогите еще пожалуйста.
Идеальным был бы вариант считать значение из файла в глобальную переменную, и использовать ее в запросе, только как это сделать?) Т.е. 2 вопроса: как считать значение из файла в переменную.

как Вы считываете значение из файла?
Что это за файл?
Как Вы с ним работаете?
3 фев 12, 14:56    [12027094]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
smoyk
Member

Откуда: Кемерово
Сообщений: 1057
HandKot,

Отказался от конфигурационных файлов, начал сначала. Создал xml файл
<?xml version="1.0" encoding="UTF-8"?>
<control>
<date>2/3/2012 3:25:32 PM</date>
<division>1</division>
</control>

В компоненте XML Task:
OperationType = XPATH,
соурс настроил на созданный файл,
SaveOperationResult = true,
DestinationType = variable,
Destination = varDivision (создал правой кнопкой по Control Flow, тип int16),
OverwriteDestination = true,
SecondOperandType = Direct Input,
SecondOperand = /control/division.

Понятно хочю значение узла division записать в переменную. Получаю ошибку
[XML Task] Error: An error occurred with the following error message: "The type of the value being assigned to variable "User::varDivision" differs from the current variable type. Variables may not change type during execution. Variable types are strict, except for variables of type Object. ".

Помогите пожалуйста разобраться, что не так)
6 фев 12, 06:55    [12037979]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
судя по ошибке, то проблема в типе переменной
какой тип переменной используете?
6 фев 12, 08:56    [12038111]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
smoyk
Member

Откуда: Кемерово
Сообщений: 1057
HandKot,

int16
6 фев 12, 08:58    [12038119]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
там не может быть такого типа. XML - это текст
6 фев 12, 09:21    [12038210]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
smoyk
Member

Откуда: Кемерово
Сообщений: 1057
HandKot,

А можно какнить преобразовать? Мне именно с числом дальше работать надо...
6 фев 12, 10:56    [12038767]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
ну так пусть переменная будет строкой
а при использовании будет как число


мне кажется, что Вы слишком углубляетесь в ту степь, которая, может, и не нужна

1. Определите точно Вашу задачу
2. Почему "конфигурационные файлы ssis " не подходят?
6 фев 12, 12:58    [12039637]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
я это к тому, что задача «XML», насколько я понимаю, немного для других целей используется

Задача «XML» используется для работы с XML-данными. С помощью этой задачи пакет может получать XML-документы,
выполнять операции над документами с помощью таблиц стилей XSLT и выражений XPath, объединять несколько документов,
проверять, сравнивать и сохранять обновленные документы в файлы и переменные.

Эта задача позволяет пакету служб Integration Services динамически изменять XML-документы во время выполнения. Можно
использовать задачу «XML» для следующих целей.

Изменение формата XML-документа. Например, задача может получить доступ к отчету, который хранится в XML-файле, и
динамически настроить представление документа с помощью таблицы стилей XSLT.


Выбор разделов XML-документа. Например, задача может получить доступ к отчету, который хранится в XML-файле, и
динамически выбрать раздел документа с помощью выражения XPath. Эта операция также может получить значения обработки в
документе.

Объединение документов из нескольких источников. Например, задача может загрузить отчет из нескольких источников и
динамически объединить их в единый общий XML-документ.
6 фев 12, 13:02    [12039684]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
smoyk
Member

Откуда: Кемерово
Сообщений: 1057
HandKot,

Увы, так не получилось, я уже пробовал, ошибка
[Execute SQL Task] Error: Executing the query "delete from [group] where id_division = ?" failed with the following error: "Ошибка преобразования значения nvarchar "MS.Internal.Xml.XPath.XPathSelectionIterator" в тип данных int.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

Переменную нужно преобразовать в число, и я примерно понимаю, что это наверно можно сделать в компоненте XML Task в Expressions, там есть свойство DestinationType, а в значениях есть Type Casts со списком типов... только я синтаксис никак понять не могу, и в мсдн не нашел.

Что касается задачи, у меня есть несколько папок, в которые данные попадают из нескольких источник/дивизионов, из которых нужно сделать загрузку в общие таблицы. Например список товаров из всех папок надо загрузить в одну таблицу "Товары", добавив к загружаемому списку номер дивизиона. Вот его (и не только) и нужно прочитать из файла хмл, который хранится в каждой папке. Это как файл настроек загрузки, из которого я загружаю значение в одну и ту же переменную, которую потом использую. Конфигурационный файл, насколько я понял, такого не позволяет. С переменной можно связать только 1 конфигурационный файл, и значение из него в переменную берется в момент запуска пакета. Это то что я понял опытным путем. Мне это не подходит.

Так что... надо строковую переменную к числу преобразовать как то)
6 фев 12, 13:19    [12039893]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
нет, чкорее всего ошибка в параметре задачи
выставьте значение PutResultInOneNode в False

автор
Что касается задачи, у меня есть несколько папок, в которые данные попадают из нескольких источник/дивизионов, из которых нужно сделать загрузку в общие таблицы

я бы лучше создал один XML-файл с настройками (можно использовать и конфигурационный файл)
в котором хранилось бы и путь к файлам и дивизион и остальное (что необходимо) для каждого источника
а в пакете использовал Foreach Loop Container с коллекцией Foreach NodeList Enumerator
для Вашего случая
Вкладка Collection
DocumentSourceType - FileConnection
DocumentSource - путь к файлу
EnumerationType - Node
OuterXPathString - /control

Вкладка Variable Mapping
User::VariableXML - имеет тип object

первым шагом в контейнере ставите ScriptTask
в которм получаете нужные данные
примерно таким кодом
            System.Xml.XmlElement x = (System.Xml.XmlElement)Dts.Variables["User::VariableXML "].Value;

            Dts.Variables["User::Variable"].Value = x.GetElementsByTagName("division")[0].InnerXml;
            Dts.Variables["User::Variable1"].Value = x.GetElementsByTagName("date")[0].InnerXml;

            MessageBox.Show(Dts.Variables["User::Variable"].Value.ToString());
            MessageBox.Show(Dts.Variables["User::Variable1"].Value.ToString());



плюс - появится новый источник, не надо настраивать пакет на новый путь, просто прописывается новый НОД в ХМЛ-файле
6 фев 12, 14:28    [12040560]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
smoyk
Member

Откуда: Кемерово
Сообщений: 1057
HandKot
нет, чкорее всего ошибка в параметре задачи
выставьте значение PutResultInOneNode в False
Стоит по умолчанию.
HandKot
я бы лучше создал один XML-файл с настройками (можно использовать и конфигурационный файл)
...
плюс - появится новый источник, не надо настраивать пакет на новый путь, просто прописывается новый НОД в ХМЛ-файле
У меня был такой вариант... но явных плюсов нет, на самом деле мне не нужно настраивать будет пакет на новый путь, т.к. Foreach Loop Container у меня бегает по папкам и ищет этот файл настроек, если находит - передает его имя дальше, и его уже разбирает XML Task. Мне показалось это проще, чем разбираться с ScriptTask...
7 фев 12, 05:48    [12044576]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
smoyk,
что у Вас стоит в XMLTAsk опция XPathOperation?
должно быть Values иначе вы будете получать не значение узла, а узел, что и вызывает ошибку
автор
Ошибка преобразования значения nvarchar "MS.Internal.Xml.XPath.XPathSelectionIterator" в тип данных int


ЗЫЖ поставьте после XMLTAsk Scripttask с одной простой командой
MessageBox.Show(Dts.Variables["User::ИмяПеременной"].Value.ToString());

и смотрите чему она у Вас равна после XMLTAsk
а тип переменной сделайте string, если возвращается нормальное число, оно без проблем сконвертируется в int в самом запросе
7 фев 12, 10:49    [12045276]     Ответить | Цитировать Сообщить модератору
 Re: Integration servises  [new]
smoyk
Member

Откуда: Кемерово
Сообщений: 1057
HandKot
smoyk,
что у Вас стоит в XMLTAsk опция XPathOperation?
должно быть Values
Спасибо, помогло.
7 фев 12, 12:21    [12045906]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить