Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Выгрузка данных в *.txt  [new]
Igork-9y
Member

Откуда:
Сообщений: 136
Задача: имеется MS SQL Server 2005 Express, установленный на рабочей станции.
Необходимо сделать выгрузку в текстовый файл данных из определенной таблицы.

Делаем линкованный сервер:

EXEC sp_addlinkedserver txtsrv, 'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'E:\DB',
NULL,
'Jet 4.0'
GO


Устанавливаем для него права:

EXEC sp_addlinkedsrvlogin txtsrv, FALSE, 'user', Admin
GO


Все создалось. В директорию E:\DB добавляем 2 файла: text.txt и Sсhema.ini для этой директории и файлов добавляем прав до Полные для пользователя user.
Формат Schema.ini следующий:
[text.txt]
ColNameHeader=True
Format=Delimited(;)
MaxScanRows=25
CharacterSet=ANSI
Col1=Code Varchar Width 50


Пробуем сделать выгрузку данных запросом типа
insert into txtsrv...[text#txt]
([code])
select [code]
from [Trade].[dbo].[Claim]


Вылезает ошибка:
Поставщик OLE DB "Microsoft.Jet.OLEDB.4.0" для связанного сервера "txtsrv" вернул сообщение "Неопознанная ошибка".
Сообщение 7303, уровень 16, состояние 1, строка 1
Не удалось проинициализировать объект источника данных поставщика OLE DB "Microsoft.Jet.OLEDB.4.0" для связанного сервера "txtsrv".


Порывшись по форуму не нашел ответа на вопрос, что же сделано не так?
19 янв 10, 16:13    [8209835]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Glory
Member

Откуда:
Сообщений: 104751
1.
EXEC sp_addlinkedserver txtsrv, 'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'E:\DB',
NULL,
'Text'

2. select * from txtsrv...[text#txt]
19 янв 10, 16:18    [8209884]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Igork-9y
Member

Откуда:
Сообщений: 136
Glory,

1.
Сделал так, как Вы указали (делал так и раньше, банально неправильно скопировал из запроса):
EXEC sp_addlinkedserver txtsrv, 'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'E:\DB',
NULL,
'Jet 4.0',
'Text'

GO


2.1. Запрос:
select * from txtsrv...[text#txt]
Падает с ошибкой
Поставщик OLE DB "Microsoft.Jet.OLEDB.4.0" для связанного сервера "txtsrv" вернул сообщение "Неопознанная ошибка".
Сообщение 7303, уровень 16, состояние 1, строка 1
Не удалось проинициализировать объект источника данных поставщика OLE DB "Microsoft.Jet.OLEDB.4.0" для связанного сервера "txtsrv"


2.2. А зачем делать select к txtsrv...[text#txt], если мне надо передать данные из базы (таблица [Trade].[dbo].[Claim]) в *.txt?
19 янв 10, 16:34    [8210025]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Glory
Member

Откуда:
Сообщений: 104751
Igork-9y

2.2. А зачем делать select к txtsrv...[text#txt], если мне надо передать данные из базы (таблица [Trade].[dbo].[Claim]) в *.txt?

Потому что неизвестно, видит ли сервер вообще эти файлы. А вы уже сразу собрались в них данные добавлять

exec sp_tables_ex 'txtsrv'
exec master..xp_cmdshell 'dir E:\DB'
19 янв 10, 16:38    [8210048]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Igork-9y
Member

Откуда:
Сообщений: 136
Glory,

Понял

1. Выполнил
exec sp_tables_ex 'txtsrv'
Ошибка
Поставщик OLE DB "Microsoft.Jet.OLEDB.4.0" для связанного сервера "txtsrv" вернул сообщение "Неопознанная ошибка".
Сообщение 7303, уровень 16, состояние 1, процедура sp_tables_ex, строка 41
Не удалось проинициализировать объект источника данных поставщика OLE DB "Microsoft.Jet.OLEDB.4.0" для связанного сервера "txtsrv".


2. Выполнил
exec master..xp_cmdshell 'dir E:\DB'
 Том в устройстве E имеет метку Data
Серийный номер тома: DC44-23C4
NULL
Содержимое папки E:\DB
NULL
19.01.2010 16:22 <DIR> .
19.01.2010 16:22 <DIR> ..
19.01.2010 13:25 116 Schema.ini
19.01.2010 16:28 4 Text.txt
2 файлов 120 байт
2 папок 81 853 009 920 байт свободно
NULL
19 янв 10, 16:55    [8210213]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Glory
Member

Откуда:
Сообщений: 104751
Хм
в результатах exec sp_enum_oledb_providers есть вообще Microsoft.Jet.OLEDB.4.0 ?
19 янв 10, 16:57    [8210240]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Igork-9y
Member

Откуда:
Сообщений: 136
Glory,

1. Результаты
exec sp_enum_oledb_providers

Microsoft.Jet.OLEDB.4.0	{dee35070-506b-11cf-b1aa-00aa00b8de95}	Microsoft Jet 4.0 OLE DB Provider
19 янв 10, 17:00    [8210261]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
--Create a linked server.
EXEC sp_addlinkedserver txtsrv, 'Jet 4.0', 
   'Microsoft.Jet.OLEDB.4.0',
   'c:\data\distqry',
   NULL,
   'Text'
GO

--Set up login mappings.
EXEC sp_addlinkedsrvlogin txtsrv, FALSE, Admin, NULL
GO

--List the tables in the linked server.
EXEC sp_tables_ex txtsrv
GO

--Query one of the tables: file1#txt
--using a four-part name. 
SELECT * 
FROM txtsrv...[file1#txt]


а теперь внимательно смотрите что вы делаете:

автор
Сделал так, как Вы указали (делал так и раньше, банально неправильно скопировал из запроса):
EXEC sp_addlinkedserver txtsrv, 'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'E:\DB',
NULL,
'Jet 4.0',
'Text'

GO
19 янв 10, 17:04    [8210306]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Igork-9y
Member

Откуда:
Сообщений: 136
Konst_One,

Пардон еще раз - мои кривые руки и конец рабочего дня подводят:
Конечно же делаю вот так:
EXEC sp_addlinkedserver txtsrv, 'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'E:\DB',
NULL,
'Text'
GO
19 янв 10, 17:10    [8210365]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
--Set up login mappings.
EXEC sp_addlinkedsrvlogin txtsrv, FALSE, Admin, NULL
GO
19 янв 10, 17:11    [8210371]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
и у вас:

автор

EXEC sp_addlinkedsrvlogin txtsrv, FALSE, 'user', Admin
GO
19 янв 10, 17:11    [8210378]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Igork-9y
Member

Откуда:
Сообщений: 136
Konst_One,

На самом деле, я попробовал варианты:
1.
EXEC sp_addlinkedsrvlogin txtsrv, FALSE, Admin, NULL
GO

Ошибка
Сообщение 15007, уровень 16, состояние 1, процедура sp_addlinkedsrvlogin, строка 76
Admin" не является допустимым именем входа или отсутствует разрешение.


2.
EXEC sp_addlinkedsrvlogin txtsrv, FALSE, 'user', NULL
GO

При вызове запроса к text.txt на select падает с ошибкой:
Поставщик OLE DB "Microsoft.Jet.OLEDB.4.0" для связанного сервера "txtsrv" вернул сообщение "Неопознанная ошибка".
Сообщение 7303, уровень 16, состояние 1, строка 1
Не удалось проинициализировать объект источника данных поставщика OLE DB "Microsoft.Jet.OLEDB.4.0" для связанного сервера "txtsrv".

При этом, при открытии Свойств Безопасности связанного сервера выдается сообщение (при нажатии ОК):

ЗАГОЛОВОК: Microsoft SQL Server Management Studio
Сопоставления имен входа должны использовать олицетворение или иметь имя удаленного входа.


3.
EXEC sp_addlinkedsrvlogin txtsrv, FALSE, 'user', Admin
GO
19 янв 10, 17:25    [8210521]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Glory
Member

Откуда:
Сообщений: 104751
Вообще то правильным синтаксисом является такой

EXEC sp_addlinkedsrvlogin txtsrv, FALSE, NULL, Admin, NULL

Читать надо хелп хоть чуть-чуть
19 янв 10, 17:28    [8210570]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Типа_Maxx
Guest
а что bcp.exe уже отменили ? для выгрузки в текстовик из 1 таблицы ???
19 янв 10, 17:30    [8210582]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
Glory
Вообще то правильным синтаксисом является такой

EXEC sp_addlinkedsrvlogin txtsrv, FALSE, NULL, Admin, NULL

Читать надо хелп хоть чуть-чуть



:)

очепятка в БОЛ (я ооттуда скопировал)
ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_6tsql/html/fed3adb0-4c15-4a1a-8acd-1b184aff558f.htm
19 янв 10, 17:33    [8210619]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Типа_Maxx
а что bcp.exe уже отменили ? для выгрузки в текстовик из 1 таблицы ???

Добавить данные в файл (аппенд) != выгрузить данные в файл
19 янв 10, 17:39    [8210699]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Типа_Maxx
Guest
МСУ
Типа_Maxx
а что bcp.exe уже отменили ? для выгрузки в текстовик из 1 таблицы ???

Добавить данные в файл (аппенд) != выгрузить данные в файл


автор
Все создалось. В директорию E:\DB добавляем 2 файла: text.txt и Sсhema.ini для этой директории и файлов добавляем прав до Полные для пользователя
! = Добавить данніе в файл,или я чет не дочитал.. вроде нигде не видел требования дописовать файл :)
19 янв 10, 17:42    [8210727]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Igork-9y
Member

Откуда:
Сообщений: 136
Типа_Maxx,

автор
а что bcp.exe уже отменили ? для выгрузки в текстовик из 1 таблицы ???


Задача: сделать так, что при insert в таблицу выгружался текстовый файл. Если кто предложит другой вариант, готов рассмотреть. Периодическая выгрузка мне не подходит.

Konst_One
автор
очепятка в БОЛ (я ооттуда скопировал)

Во-во :)

Glory,
сделал как Вы сказали - не помогло, выдает вышеуказанную ошибку
19 янв 10, 17:44    [8210747]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Типа_Maxx
вроде нигде не видел требования дописовать файл :)

Ну я как-бы тоже не видел :) Но, зачем тогда линкед сервер делать...
Если сделан линкед, подразумевается, он работает с кастрированным реальным файл-сервером и транспортирует туда-сюда данные )
19 янв 10, 17:46    [8210762]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Типа_Махх
Guest
Igork-9y,непонял Вам надо что б дублировались записи ?? и в таблицу и в файл ???
19 янв 10, 17:47    [8210766]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Типа_Махх
Guest
МСУ,
так исходя из последнего поста ТС,я б ваще склонялся к процедуре на С# которая работает с файлом и все.
19 янв 10, 17:48    [8210781]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Типа_Махх
Guest
Igork-9y,

надеюст директория 'E:\DB' на сервере ,а не на вашей рабочей станции живет ?
19 янв 10, 17:50    [8210800]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Igork-9y
Member

Откуда:
Сообщений: 136
Типа_Махх,

В таблицу, которая должна сформировать *.txt, данные передаются по триггеру из другой таблицы.
Исходя из требований быстродействия файл должен формироваться при записи в таблицу (при insert).

автор
надеюст директория 'E:\DB' на сервере ,а не на вашей рабочей станции живет ?

Рабочая станция и есть сервер.

Итак, запустил SQL Server Management Studio Express под администраторскими правами - заработало (то есть я работал не под учеткой администратора на своей рабочей станции).
Вопрос - каким образом (и возможно ли вообще) сделать так, чтобы при запуске SQL Server Management Studio Express под не администратором и работе в среде SQL сервера под админскими правами ошибка не возникала?
19 янв 10, 18:07    [8210938]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Ну Вас же уже спрашивали, чем аут балк не подошел?

exec master..xp_cmdshell 'bcp master..sysobjects out c:\text.txt -c -T'
19 янв 10, 18:10    [8210953]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка данных в *.txt  [new]
Igork-9y
Member

Откуда:
Сообщений: 136
МСУ,

автор
Ну Вас же уже спрашивали, чем аут балк не подошел?


exec master..xp_cmdshell 'bcp master..sysobjects out c:\text.txt -c -T'


Не подошел тем, что:
1. Если использовать в качестве источника информации таблицу SQL, то не факт, что данные там уже есть. Во всяком случае, при попытке сваять триггер на Insert, в который включить создание текстового файла приводило к ошибкам (по тайм ауту).
2. Таблицу Inserted не вставить в триггер - выдаст ошибку (в самом *.txt) - что таблица Inserted не найдена в данной БД.
19 янв 10, 18:21    [8211014]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить