Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Добавление данных в базу MSSQL2005 / 16 сообщений из 16, страница 1 из 1
09.10.2007, 10:16
    #34855854
Учу T-SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
Подскажите, пожалуйста, есть ли способ, обращаясь к MSSQL серверу, добавлять данные в таблицу на сервере не построчно (не SQLEXEC(nh,"INSERT INTO base VALUES ('a','b'))). Есть необходимость ежедневно из фокса переносить данные из фоксовой таблицы в SQL'ную. Проблема в том, что данные построчно переносятся очень долго, а другого способа я пока не нашёл. Вот что тупо хочется, так это передать всю таблицу в SQL, а там (в хранимке ли, иль ещё каким способом) добавлять в таблицу. Просьба ногами не пинать и не мучить сильно :)
...
Рейтинг: 0 / 0
09.10.2007, 10:22
    #34855865
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
...
Рейтинг: 0 / 0
09.10.2007, 11:02
    #34856007
Учу T-SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
Sergey Sizov. Тынц

Шiро дякую :)
...
Рейтинг: 0 / 0
09.10.2007, 12:16
    #34856349
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
Можно использовать Linked Server c VFP OleDbProvider - дале пишется job (обычно вызов SP) и через положенные интервалы времени происходит добавление данных в базу данных MS SQL Server... Это очень просто, не поленитесь изучить один раз, потом можно лего все это использовать постоянно :)

Good luck!

P.S. В SP используется привычный нам синтаксис - INSERT (SQL) FROM...
...
Рейтинг: 0 / 0
09.10.2007, 12:48
    #34856513
Декоратор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
Я использую пакеты DTS. Просто и надежно как отбойный молоток, и кстати так же можно поместить в JOB.
...
Рейтинг: 0 / 0
09.10.2007, 14:04
    #34856848
Учу T-SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
Sergey ChМожно использовать Linked Server c VFP OleDbProvider - дале пишется job (обычно вызов SP) и через положенные интервалы времени происходит добавление данных в базу данных MS SQL Server... Это очень просто, не поленитесь изучить один раз, потом можно лего все это использовать постоянно :)

Линкед сервер использовал в проекте на C# - это несложно. В данном случае на фоксе задача не позволяет его использовать, так как данные в SQL нужно добавлять из файлов со случайными именами на базе SYS(2015), так что в момент запуска job'а я не буду иметь представление об именах таблиц.

Sergey ChP.S. В SP используется привычный нам синтаксис - INSERT (SQL) FROM...

В данном контексте не понял "SP" - это что?
...
Рейтинг: 0 / 0
09.10.2007, 14:06
    #34856856
Учу T-SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
ДекораторЯ использую пакеты DTS. Просто и надежно как отбойный молоток, и кстати так же можно поместить в JOB.

А про это можно подробнее узнать?
...
Рейтинг: 0 / 0
09.10.2007, 14:07
    #34856866
Декоратор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
В ветке MS SqlServer поиск по DTS решит все ваши проблемы.
...
Рейтинг: 0 / 0
09.10.2007, 14:08
    #34856867
Учу T-SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
Учу T-SQL Sergey ChP.S. В SP используется привычный нам синтаксис - INSERT (SQL) FROM...

В данном контексте не понял "SP" - это что?

Не сразу сообразил, что вы имели в виду хранимые процедуры.
...
Рейтинг: 0 / 0
09.10.2007, 14:20
    #34856915
Учу T-SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
ДекораторВ ветке MS SqlServer поиск по DTS решит все ваши проблемы.

А термин расшифровать можете? А то там информации много, но отвечающие и спрашивающие считают, что всё это всем известно :)
...
Рейтинг: 0 / 0
09.10.2007, 14:21
    #34856920
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
Учу T-SQL Линкед сервер использовал в проекте на C# - это несложно. В данном случае на фоксе задача не позволяет его использовать, так как данные в SQL нужно добавлять из файлов со случайными именами на базе SYS(2015), так что в момент запуска job'а я не буду иметь представление об именах таблиц...
Какая ерунда - Вы босс, соответсвенно можно давать осмысленные имена на базе, например, интервалов времени а в C# легко можно прочитать, что добавлять, затем через вызов SP в качестве параметра передавать имя файла...

P.S. В MS SQL Server 2005 можно все прямо сделать в самом сервере, так как он поддерживает .NET 2.0 (хотя меня смутно терзают соменения, что что-то подобное можно сделать и через DTS (то есть нам не надо изобретать велосипед))
...
Рейтинг: 0 / 0
09.10.2007, 20:41
    #34858369
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
В принципе, Sergey Sizov дал уже ссылку на работу через XML строку с набором данных
Но можешь еще тут посмотреть: http://www.caws.atnet.ru/vfox/sql3.html#sql_tabl_ref
Вариант с XML там тоже рассматривается.
С уважением, Алексей
...
Рейтинг: 0 / 0
09.10.2007, 21:22
    #34858436
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
Учу T-SQL ДекораторВ ветке MS SqlServer поиск по DTS решит все ваши проблемы.

А термин расшифровать можете? А то там информации много, но отвечающие и спрашивающие считают, что всё это всем известно :)
В MS SQL Server 2005 он заменен на Integration Services (SSIS) ...

MSDNIntegration Services is a platform for building high performance data integration and workflow solutions, including extraction, transformation, and loading (ETL) operations for data warehousing.

Integration Services includes graphical tools and wizards for building and debugging packages; tasks for performing workflow functions such as FTP operations, SQL statement execution, and e-mail messaging; data sources and destinations for extracting and loading data; transformations for cleaning, aggregating, merging, and copying data; a management service, the Integration Services service, for administering Integration Services packages; and application programming interfaces (APIs) for programming the Integration Services object model.
...
Рейтинг: 0 / 0
09.10.2007, 21:53
    #34858482
Учу T-SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
Aleksey-KВ принципе, Sergey Sizov дал уже ссылку на работу через XML строку с набором данных
Но можешь еще тут посмотреть: http://www.caws.atnet.ru/vfox/sql3.html#sql_tabl_ref
Вариант с XML там тоже рассматривается.

Уже поглядел :)
...
Рейтинг: 0 / 0
10.10.2007, 14:38
    #34860407
Учу T-SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
Подскажите ещё такой момент: на SQL сервере есть процедура, которая принимает идентификатор записи и другие параметры и, в зависимости от наличия такого идентификатора в таблице, либо делает UPDATE либо INSERT. Эта процедура работает без нареканий. Теперь в другой процедуре я принимаю параметром XML, сформированный CURSORTOXML и создаю временную таблицу SELECT ... OPENXML ... INTO #_temp. Теперь есть желание передать каждую строку из полученной временной таблицы в вышеописанную процедуру. Как это правильно сделать? Надо организовать во второй процедуре какой-то цикл (как?)? Или можно написать что-то вроде EXECUTE my_Procedure SELECT f1,f2,f3 FROM #_temp?

Помогите найти оптимальное решение.
...
Рейтинг: 0 / 0
10.10.2007, 19:15
    #34861479
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление данных в базу MSSQL2005
Учу T-SQLПодскажите ещё такой момент: на SQL сервере есть процедура, которая принимает идентификатор записи и другие параметры и, в зависимости от наличия такого идентификатора в таблице, либо делает UPDATE либо INSERT. Эта процедура работает без нареканий. Теперь в другой процедуре я принимаю параметром XML, сформированный CURSORTOXML и создаю временную таблицу SELECT ... OPENXML ... INTO #_temp. Теперь есть желание передать каждую строку из полученной временной таблицы в вышеописанную процедуру. Как это правильно сделать? Надо организовать во второй процедуре какой-то цикл (как?)? Или можно написать что-то вроде EXECUTE my_Procedure SELECT f1,f2,f3 FROM #_temp?

Помогите найти оптимальное решение.
Я думаю, что самое простое, это организовать цикл с помощью серверного курсора в первой процедуре по временной таблице, которая была заполнена через OPENXML, а при вызове второй, использовать переменные, которые заполняет команда FETCH. Кстати, в этом случае совсем не обязательно создавать временную таблицу. Можно курсор организовать по результатам запроса к OPENXML.
Например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
CREATE PROCEDURE dbo.my_Procedure_Outer
     ...
     ...
     @XMLSTR TEXT = NULL, -- Строка XML

DECLARE @RESULT INT,
, @AktMBPRash_ID INT
, @Ost_ID_Rash INT
, @Kvo_Need DECIMAL( 18 , 3 )
, @TYPE_IN_DOK TINYINT
, @PART_STR_ID INT
...
...
EXEC @RESULT = sp_xml_preparedocument @IDXML_LINE  OUTPUT, @XMLSTR
IF (@RESULT <>  0 ) OR (@IDXML_LINE IS NULL)
BEGIN
	ROLLBACK TRANSACTION
	RAISERROR('Ошибка обработки XML',  16 ,  1 )
	RETURN (- 1 ) 
END
DECLARE Docum CURSOR FORWARD_ONLY LOCAL STATIC FOR
  SELECT aktmbprash_id, ostatok_id, kvo_need, type_in_dok, part_str_id
  FROM OPENXML ( @IDXML_LINE, '/VFPData/listout',  2 )
  WITH (aktmbprash_id int, ostatok_id int, kvo_need decimal( 18 , 3 ), type_in_dok tinyint, part_str_id int)
  ORDER BY kvo_need DESC
OPEN Docum
FETCH NEXT FROM Docum INTO @AktMBPRash_ID, @Ost_ID_Rash, @Kvo_Need, @TYPE_IN_DOK, @PART_STR_ID
WHILE @@FETCH_STATUS =  0 
BEGIN
...
...
  EXEC @RET_CODE = my_Procedure_Inner  @AktMBPRash_ID, @Ost_ID_Rash, @Kvo_Need,   @TYPE_IN_DOK,  @PART_STR_ID
IF @RET_CODE <  0 
BEGIN
   IF @@TRANCOUNT <>  0 
        ROLLBACK TRANSACTION
   RAISERROR('Ошибка тра-та-та для AktMBPRash_ID=%d!',  16 ,  1 , @AktMBPRash_ID)
   RETURN (- 1 )
END
...
  FETCH NEXT FROM Docum INTO @AktMBPRash_ID, @Ost_ID_Rash, @Kvo_Need, @TYPE_IN_DOK,   @PART_STR_ID
END
CLOSE Docum
DEALLOCATE Docum
EXEC sp_xml_removedocument @IDXML_LINE
...
...
С уважением, Алексей.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Добавление данных в базу MSSQL2005 / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]