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

Откуда: Сургут
Сообщений: 132
Допустим имеется таблица на SQL Server 2000 которая в первом поле содержит двоичный файл, а во втором дату последнего изменения двоичного файла. Подскажите, как будет выглядеть хранимая процедура, считывающая этот файл (file.tmp) с каталога (допустим D:\Temp) поверх имеющегося в таблице, если файл в каталоге "свежее" (что-то типа по LastModified), чем соответствующее поле даты в таблице?
3 июн 04, 14:44    [719615]     Ответить | Цитировать Сообщить модератору
 Re: Работа со свойствами файл  [new]
Glory
Member

Откуда:
Сообщений: 104760
Лучше пусть это делает клиентское приложение, отталкиваясь наоборт о свойств файла.
3 июн 04, 15:56    [720051]     Ответить | Цитировать Сообщить модератору
 Re: Работа со свойствами файл  [new]
BugsBunny
Member

Откуда: GMT+5=EST
Сообщений: 2414
Glory
Лучше пусть это делает клиентское приложение, отталкиваясь наоборт о свойств файла.

Agreed but sometimes you want to perform operation from server side as opposite to client side.
Example: We have all our servers in downtown, office 30km appart with LAN-extension (40Mbit/s, not bad, yeah?) in between. Task is to load 2GB file. Client approach means put these 2GB through 40MB pipe twice (fileserver->client->SQL) instead of preferable once (fileserver->SQL) through Gigabit. Downgrade that to slow link via modem...
So, question itself is quite reasonable

To =viT=:
Wrap client application written with COM-objects (Scripting.FileSystemObject,ADODB.Connection,ADODB.Recordset and etc) into "BOL::OLE Automation Objects in Transact-SQL" in stored procedure. Like for example, this one wrap CDOSYS Посылка email из процедуры
3 июн 04, 22:16    [721055]     Ответить | Цитировать Сообщить модератору
 Re: Работа со свойствами файл  [new]
Glory
Member

Откуда:
Сообщений: 104760
So, question itself is quite reasonable
А кто сказал что это приложение должно запускаться на рабочей станции ?
Его запросто можно запустить на сервере с помощью xp_cmdshell. Ведь желаемый алгоритм обработки вроде бы не предусматривает диалогов с пользователем.

Как минимум можно использовать
exec master..xp_cmshell 'dir d:\temp\*.*'
и
exec master..xp_cmshell 'textcopy.exe .....'
3 июн 04, 22:25    [721066]     Ответить | Цитировать Сообщить модератору
 Re: Работа со свойствами файл  [new]
BugsBunny
Member

Откуда: GMT+5=EST
Сообщений: 2414
To Glory: it's even better. The only problem is not to forget about external executables while moving SQL server from machine to machine.
3 июн 04, 22:50    [721087]     Ответить | Цитировать Сообщить модератору
 Re: Работа со свойствами файл  [new]
=viT=
Member

Откуда: Сургут
Сообщений: 132
2 Glory:
В том-то и дело, что есть 3 машины:
1) SQL-сервер (отдельный комп.) и комп. с новым файлом (в одной сетке)
2) Комп. клиента желающего обновить файл (в другой сетке) к SQL серверу подключающийся по стандартной аутентификации.

Мне в голову приходит пока только один алгоритм:
1) Клиентское приложение (допустим на VB) считывает дату последнего обновления файла file.tmp
2) Клиентское приложение "лезет" на сервер и узнаёт содержимое поля last_downloaded в строке, в которой во второй "ячейке" лежит бинарный файл
"file.tmp"
3) Если значение last_downloaded свежее, чем клиентское, то клиент запускает хранимую процедуру SP_filecompare
4) SP_filecompare сравнивает дату последнего обновления файла file.tmp лежащего на компе в этой же сетке где и SQL-сервер.
5) Если тот файл еще новее, то происходит его загрузка в таблицу.
6) После выполнения/пропуска SP_filecompare клиентское приложение скачивает файл из БД на свой комп (находящийся в другой сетке)

Вопрос: Может я чего-то лишнего намудрил, и всё это можно реализовать другим способом (вся проблема в сетках - SQL-сервер доступен этим двум машинам).
4 июн 04, 10:29    [721632]     Ответить | Цитировать Сообщить модератору
 Re: Работа со свойствами файл  [new]
Glory
Member

Откуда:
Сообщений: 104760
- В чем различие 2) и 4) пунктов ?
-3) Если значение last_downloaded свежее, чем клиентское, то клиент запускает хранимую процедуру SP_filecompare
Т.е. у клиента еще какая-то своя локальная база с "last_downloaded" ?
4 июн 04, 10:34    [721653]     Ответить | Цитировать Сообщить модератору
 Re: Работа со свойствами файл  [new]
=viT=
Member

Откуда: Сургут
Сообщений: 132
2 Glory:
У клиента свой файл file.tmp который он по возможности может обновить, а может и не обновит, если на сервере las_downloaded к этому файлу содержащемуся в таблице не свежий.
На клиенте есть только этот файл, без всяких там БД.
4 июн 04, 10:55    [721735]     Ответить | Цитировать Сообщить модератору
 Re: Работа со свойствами файл  [new]
=viT=
Member

Откуда: Сургут
Сообщений: 132
2 Glory:
Пункт 4 - обращение уже к другому клиентскому компу (находящегося в сетке с SQL-сервером).
4 июн 04, 10:56    [721751]     Ответить | Цитировать Сообщить модератору
 Re: Работа со свойствами файл  [new]
Glory
Member

Откуда:
Сообщений: 104760
Т.е. есть 2 файла - у клиента и еще где-то - и база с какой-то датой last_downloaded и файлом в BLOB столбце ?
И нужно на основе 3х дат выбрать какой файл закачать(или не закачивать вообще) ?
4 июн 04, 10:58    [721758]     Ответить | Цитировать Сообщить модератору
 Re: Работа со свойствами файл  [new]
=viT=
Member

Откуда: Сургут
Сообщений: 132
2 Glory: Да ты правильно понял.
Ды к вот: не намудрил ли я?
4 июн 04, 11:07    [721798]     Ответить | Цитировать Сообщить модератору
 Re: Работа со свойствами файл  [new]
Glory
Member

Откуда:
Сообщений: 104760
Мне кажется что проще будет так
1) Клиент открывает соединение и отсылает серверу дату своего файла. В процедуру.
2) Сервер сравнивает полученную дату со своей и у файла хранящегося еще где-то(xp_cmdshell 'dir c:\*.*').
3) Если самый новый файл находится у клиента то процедура возвращает флажок, что клиент должен инициировать загрузку своего файла.
4) Клиент, получив флаг, читает содержимое файла и передает его в другую процедуру сервера. которая и обновляет содержимое таблицы
5) Если самый новый файл находится на другом сервер то sql запускает какое-то внешнее приложение - textcopy или простенький VBScript или еще что-то - которое читает содержимое файла и передает его опять же процедуре загрузки файла в столбец.
(Возможно формить приложение в качестве dll-ки и сделать его extended stored procedure-ой сервера. Только придется чуть попрограммировать)

Итого имеем
- 2 процедуры: для проверки дат файлов и загрузки содержимого файла в столбец
- 1 внешнее приложение на сервере
4 июн 04, 11:17    [721853]     Ответить | Цитировать Сообщить модератору
 Re: Работа со свойствами файл  [new]
Glory
Member

Откуда:
Сообщений: 104760
Кстати я бы еще сделал периодическую проверку на необходимость обновления файлов в таблице и на файлом сервере. Например, раз в сутки, ночью. Тогда бы уменшилась нагрузка на тот момент когда клиент будет проверять свой файл - ибо возможно ночью уже закачалась новая версия файла.
4 июн 04, 11:27    [721911]     Ответить | Цитировать Сообщить модератору
 Re: Работа со свойствами файл  [new]
=viT=Guest
Guest
(уж запарка - без cookie теперь корректно не залогинишься)
Glory
5) Если самый новый файл находится на другом сервер то sql запускает какое-то внешнее приложение - textcopy или простенький VBScript

А можешь пример с VBScript'ом показать? Кстати с textcopy помучался, в итоге смог bmp, doc и rar файлы залить, а вот mdb даже на 220Kb залиться отказался
пишет:
textcopy =)
TEXTCOPY Version 1.0
DB-Library version 8.00.194
ERROR: Text or image write failed.
SQL Server 'KRYLOFF' Message 21: Warning: Fatal error 7102 occured at Jun 16 2004 11:02AM (Concerning line 1)
SQL Server 'KRYLOFF' Message 3621: The statement has been terminated. (Concerning line 1)
DB-Library Error 10007: General SQL Server error: Check messages from the SQL Server.
16 июн 04, 13:14    [744982]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить