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

Откуда:
Сообщений: 28
В общем стоит задача. по мне бред сивой кобылы но есть.
1) скачать котировки в формате XML с сайта РосБанка на дату пример
http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/03/2002
2) СОХРАНИТЬ(! нафига) в файл ляляля +дата.XML НО в формате UNF8 что средствами чистым SQL до сервера 2019 не реально
3) записат данные в таблицу формата ( тут опять смешно... нафига ид если дата и так уникальна)
ID int identity(1,1),
date_ datetime,
bakc numeric(10,4),
eur numeric(10,4) 

4) опять юмор...ЗАМЕНИТЬ данные бакса и евро если они уже есть.... как-будто они поменяются годовалой давности...


1 вариант через ОЛЕ сделал 2 частично 3 и 4 дело 2х минут

проблема такая...как не используя написания своего ОЛЕ и (ненавижу) ЦРЛ.... выполнить КОДИРОВКУ в УТФ8. помогите плиз.

код скачки и сохранения... создания и пихание в таблицу уж не привожу- это ерунда

DECLARE   @obj int, @obj1 int, @obj2 int  
				, @hr int
				, @loadhr int =0
				, @src varchar(255)
				, @desc varchar(255)
				,	@url varchar(255) = 
					'http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/03/2002'
				, @r nvarchar(1000)  
				, @xml XML
				, @FilePath nvarchar(1024) = 'c:/lll.xml',
				@ww nvarchar(1009) = '<xsl:transform >
<xsl:output version="1.0" encoding="UTF-8" indent="yes" />

</xsl:transform>'
				
-- создаем ОЛЕ				
EXEC @hr = sp_OACreate 'MSXML2.DOMDocument', @obj OUT;  

-- параметры койкакие
EXEC @hr = sp_OASetProperty @obj,'async', False
-- грузим
EXEC @hr = sp_OAMethod @obj,'load', @loadhr OUTPUT, @url


-- проверка на "загруженность"
IF @loadhr <> 1  
begin
  RAISERROR ('что-то пошло не так с загрузкой',16,1);
  EXEC @hr = sp_OADestroy  @obj;  
  return;
end;
exec @hr = sp_OAMethod @obj2, 'save', null, @FilePath

-- убиваем
EXEC @hr = sp_OADestroy @obj;  
go



перекодить нарыл в инете пробовал но не вышло так ( по верхнему коду)

EXEC @hr = sp_OACreate 'MSXML2.DOMDocument', @obj1 OUT;
EXEC @hr = sp_OASetProperty @obj1,'xsl', @ww
 
EXEC @hr = sp_OACreate 'MSXML2.DOMDocument', @obj2 OUT; 

-- параметры койкакие ... но тут с трансофр вышла кака

EXEC @hr = sp_OASetProperty @obj2,'async', False
EXEC @hr = sp_OAMethod @obj2,'load', @loadhr OUTPUT, @url
-- EXEC @hr = sp_OAMethod @obj,'transformNodeToObject', @loadhr OUTPUT,@obj1,  @obj2
 exec @hr = sp_OAMethod @obj2, 'save', null, @FilePath


помогите советом плиз)
СПС!
1 фев 19, 20:20    [21800128]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
.Евгений
Member

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

используйте SSIS.
1 фев 19, 20:43    [21800145]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
pahanitto
Member

Откуда:
Сообщений: 28
а если подробнее пожалуйсто
1 фев 19, 20:44    [21800146]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
pahanitto
Member

Откуда:
Сообщений: 28
а и да все должно быть в процедурке инкапсулировано
1 фев 19, 20:47    [21800147]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1172
pahanitto,

https://habr.com/ru/post/198224/
1 фев 19, 20:47    [21800148]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
pahanitto
Member

Откуда:
Сообщений: 28
спс но опят не то

про это я знаю НО заснуть в обычную процедурку без привлечения таких танков...

типа DOMDocument или XMLHTTP такими ОЛЕ можно перекодировать в ютф8 и сохранить соответсвенно не занимась написания например на делфях своего ОЛЕ или скриптов на С#
вот в чем проблема
возсожно не верно выразился
1 фев 19, 20:56    [21800155]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
pahanitto
Member

Откуда:
Сообщений: 28
проблема ПЕРЕКОДИРОВАТЬ в UTF8 ... что сама MSSQL не полволяет через коллейшен вплоть до 2019 версии
вот это проблема

решений я так понимаю нет(
1 фев 19, 21:11    [21800167]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1172
pahanitto,

зачем вам нужно пытаться изобрести велосипед если есть вполне готовые работающие решения?
или это домашнее задание?

задача решается через CLR но ее вы тоже не хотите
1 фев 19, 21:17    [21800170]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30726
pahanitto
про это я знаю НО заснуть в обычную процедурку без привлечения таких танков...

типа DOMDocument или XMLHTTP такими ОЛЕ можно перекодировать в ютф8 и сохранить соответсвенно не занимась написания например на делфях своего ОЛЕ или скриптов на С#
вот в чем проблема
возсожно не верно выразился
Непонятно, что вам нужно.

Вот вы используете внешний софт, вызывая его через OLE.

Значит, можно решать задачу любым внешним софтом, вызывая его обязательно только через OLE?

Просто непонятно, какие у вашей задачи ограничения?
Что то вроде "Напишите запрос, из таких то таблиц по такому то алгоритму, не используя в коде букву А" - так, что ли?
1 фев 19, 21:22    [21800173]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
pahanitto
Member

Откуда:
Сообщений: 28
ясно
CLR то понятно но
ОЛЕ то внешка. но я пишу на ДЕЛФИ и как я ее в .NET встрою... корячить на бейсике или С#? которых лет 10 не видел ?
или я что0то фундаментально не понимаю.... иду сдавать MSCA а чую себя школьником...(пробные кстати сдал)... но там именно SQL и работа с данными а не костыли

т.е. только бейсик и тд?
1 фев 19, 21:35    [21800178]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
pahanitto
Member

Откуда:
Сообщений: 28
или проще
какие методы у DOMDocument или XMLHTTP есть для прекодирования чтобы я мог их вызвать чеhез sp_.....sql

я 3 день в непоняткас етим кодированием в рамках sql
1 фев 19, 21:39    [21800181]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
pahanitto
Member

Откуда:
Сообщений: 28
и кстати CLR (он же промежуточный код по русски) это не OLE.... совсем не оле... это разные вещи принципмцмально
1 фев 19, 21:59    [21800193]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1172
pahanitto,

1) скачать котировки в формате XML с сайта РосБанка на дату пример
http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/03/2002
2) СОХРАНИТЬ(! нафига) в файл ляляля +дата.XML НО в формате UNF8 что средствами чистым SQL до сервера 2019 не реально
3) записат данные в таблицу формата ( тут опять смешно... нафига ид если дата и так уникальна)


вот здесь вполне конкретное описание у вас что нужно сделать, зачем вы привязались к процедурам ole автоматизации?

CLR то понятно но
ОЛЕ то внешка. но я пишу на ДЕЛФИ и как я ее в .NET встрою... корячить на бейсике или С#? которых лет 10 не видел ?
или я что0то фундаментально не понимаю.... иду сдавать MSCA а чую себя школьником...(пробные кстати сдал)... но там именно SQL и работа с данными а не костыли

т.е. только бейсик и тд?

вот из этого вашего потока мыслей вообще ничего не понятно. дельфи то тут причем?

+

ну если хотите костылей с ole то : скачивайте ваш файлик как у вас в скрипте, после сохранения, создавайте еще один объект ole-автоматизации ADODB.Stream устанавливаете потоку необходимую кодовую страницу, читаете ваш документ, сохраняете в выходной поток, записываете в файл.
1 фев 19, 22:15    [21800196]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
pahanitto
Member

Откуда:
Сообщений: 28
ответ прост
1) скачать данные с ЮРЛ +
2)сохранить в фаил ляляля.лялял
2) .а просто сохранить +
2) .б сохранить файло в формате UTF8 и сменить хедар соответственно в XML(но это и руками можно) вот тут ---!
может кто знает как с момощью MSDOC мона перекодировать?
3)создать табличку +
4) засунуть строку в таблицу +

на счет Делфи.
на чем прикажете писать скрипт втсроенный если я не помнб не бейсик не C#..... писать СОМ на делфях тоже неправильно... только регестрировать замучасся
1 фев 19, 22:26    [21800202]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
pahanitto
Member

Откуда:
Сообщений: 28
автор
ну если хотите костылей с ole то : скачивайте ваш файлик как у вас в скрипте, после сохранения, создавайте еще один объект ole-автоматизации ADODB.Stream устанавливаете потоку необходимую кодовую страницу, читаете ваш документ, сохраняете в выходной поток, записываете в файл.


щас попробую спс
вот что и искалось если выгорит
1 фев 19, 22:31    [21800205]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
Владислав Колосов
Member

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

для этого и придумали Integration Services. Качайте (C# скриптом, примеров тысячи), преобразуйте, сливайте-разливайте, выгружайте, форматируйте-конвертируйте. Можете загрузку на другом сервере запускать и даже без SQL.
1 фев 19, 22:42    [21800207]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
aleks222
Member

Откуда:
Сообщений: 849
pahanitto
2) СОХРАНИТЬ(! нафига) в файл ляляля +дата.XML НО в формате UNF8 что средствами чистым SQL до сервера 2019 не реально

помогите советом плиз)


Головой работать надо. Все эти кодировки - сущий пустяк.

Замутить обратное преобразование - не сложнее.

-- Description:	Преобразование utf8 в utf16 (nchar)
-- =============================================
/* 
declare @b as varbinary(max) = 0xD09CD0BED180D0B520D0A2D180D18DD0B2D0B5D0BB2E20D094D09ED09AD0A3D09CD095D09DD0A2D0AB20D094D09BD0AF20D09AD09BD098D095D09DD0A2D09020D0BFD0BE20D182D183D180D1832054523830393230303034;
select * from dbo.[utf8-to-utf16](@b)
*/
ALTER FUNCTION [dbo].[utf8-to-utf16]( @utf8 varbinary(max) )
RETURNS TABLE 
AS
RETURN 
(
with b as ( select b = substring(@utf8, n, 1), n from dbo.N where n between 1 and len(@utf8) )
   , bn as ( select b, n from b where b&128 = 0 or b&224 = 192 or b&240 = 224 or b&248 = 240 )
   , chs as ( select b = case  
                            when b&128 = 0   then      b 
                            when b&224 = 192 then     (b&31) * 64 | ( substring(@utf8, n+1, 1) & 63 ) 
                            when b&240 = 224 then   ( (b&15) * 64 | ( substring(@utf8, n+1, 1) & 63 ) ) * 64 | ( substring(@utf8, n+2, 1) & 63 ) 
                            else                  ( ( (b&07) * 64 | ( substring(@utf8, n+1, 1) & 63 ) ) * 64 | ( substring(@utf8, n+2, 1) & 63 ) ) * 64 | ( substring(@utf8, n+3, 1) & 63 ) 
                         end
                   , n
               from bn
           )
    select utf16 = ( select nchar(b) from chs order by n asc for xml path(''), type ).value('.', 'nvarchar(max)')
)
2 фев 19, 06:36    [21800298]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
aleks222
Member

Откуда:
Сообщений: 849
Не удержался... замутил

/*
select * from [dbo].[utf16-to-utf8]( N'abcабв' )

declare @b as varbinary(max);
select @b = utf8 from [dbo].[utf16-to-utf8]( N'abcабв' )
select * from dbo.[utf8-to-utf16](@b)
*/
alter FUNCTION [dbo].[utf16-to-utf8]( @utf16 nvarchar(max) )
RETURNS TABLE 
AS
RETURN 
(
with t as ( select n = 0, b = cast('' as varbinary(max)), c = unicode( substring(@utf16, 1, 1) ) 
            union all
            select n = n + 1
                 , b = b + case when c < 0x80     then cast(c as varbinary(1))
                                when c < 0x800    then cast(((c * 4) & 0xFF00) | (c & 0x3F) | 0xC080 as varbinary(2)) 
                                when c < 0x10000  then cast(((c * 0x10) & 0xFF0000) | ((c * 4) & 0x3F00) | (c & 0x3F) | 0xe08080 as varbinary(3))
                                else                   cast(((c * 0x40) & 0xFF000000) | ((c * 0x10) & 0x3F0000) | ((c * 4) & 0x3F00) | (c & 0x3F) | 0xf0808080 as varbinary(4)) 
                           end
                 , c = unicode( substring(@utf16, n + 2, 1) ) 
              from t where n < len(@utf16)
          )
    select top(1) utf8 = b from t order by n desc
)
2 фев 19, 07:37    [21800300]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30726
pahanitto
ответ прост
1) скачать данные с ЮРЛ +
2)сохранить в фаил ляляля.лялял
2) .а просто сохранить +
2) .б сохранить файло в формате UTF8 и сменить хедар соответственно в XML(но это и руками можно) вот тут ---!
может кто знает как с момощью MSDOC мона перекодировать?
3)создать табличку +
4) засунуть строку в таблицу +

на счет Делфи.
на чем прикажете писать скрипт втсроенный если я не помнб не бейсик не C#..... писать СОМ на делфях тоже неправильно... только регестрировать замучасся
Так напишите прогу на дельфи, и вызовите её из сиквела (раз уж обязательно вызывать из процедуры, как вы говорите). Зачем вам OLE, непонятно.
Или напишите пакет в SSIS, вызовите его из сиквела.
Или используйте PowerShell
Или вот даже на сиквеле можно преобразовать, как вам aleks222 написал.

В общем, всё, что угодно, кроме OLE.
2 фев 19, 07:59    [21800302]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
S_Cher
Member

Откуда:
Сообщений: 23
pahanitto,
На делфи наверное быстрее все таки...
вот мой вариант, замороченнее.
1. wget - ом качаешь файл по ссылке.
2. далее первая или вторая ссылка в яндексе по тексту "cmd поменять кодировку txt"
3. стандартными средствам скуля открываешь xml

возможно wget умеет менять кодировку, параметров у него куча.
2 фев 19, 17:17    [21800484]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
pahanitto
Member

Откуда:
Сообщений: 28
S_Cher
pahanitto,
На делфи наверное быстрее все таки...
вот мой вариант, замороченнее.
1. wget - ом качаешь файл по ссылке.
2. далее первая или вторая ссылка в яндексе по тексту "cmd поменять кодировку txt"
3. стандартными средствам скуля открываешь xml

возможно wget умеет менять кодировку, параметров у него куча.


вот это высший пилотаж.... до меня даже мысли такой не дошло)) супер так попытаюсь дополнительно сделать)) пусть начальство усохнет...

не реально я опух от такой идеи) даже в мыслях небыло
2 фев 19, 21:26    [21800553]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
pahanitto
Member

Откуда:
Сообщений: 28
задача ешилась так.. но варик с перекодировкой вручную полюбому начальству впиндюрю спс)
DECLARE   @obj int, @obj1 int, @obj2 int  
				, @hr int
				, @loadhr int =0
				, @src varchar(255)
				, @desc varchar(255)
				,	@url varchar(255) = 
					'http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/03/2002'
				, @r nvarchar(1000)  
				, @xml XML
				, @FilePath nvarchar(1024) = 'c:/lll.xml';
				
-- создаем ОЛЕ				
EXEC @hr = sp_OACreate 'MSXML2.DOMDocument', @obj OUT;  

-- параметры койкакие
EXEC @hr = sp_OASetProperty @obj,'async', False
-- грузим
EXEC @hr = sp_OAMethod @obj,'load', @loadhr OUTPUT, @url

-- проверка на "загруженность"
IF @loadhr <> 1  
begin
  RAISERROR ('что-то пошло не так с загрузкой',16,1);
  EXEC @hr = sp_OADestroy  @obj;  
  return;
end;

-- сохраняем
 exec @hr = sp_OAMethod @obj, 'save', null, @FilePath

-- убиваем
EXEC @hr = sp_OADestroy @obj;  

--кодировка
EXEC @hr = sp_OACreate' Adodb.Stream', @obj OUT;
EXEC @hr = sp_OASetProperty @obj,'charset', 'Windows-1251' 
EXEC @hr = sp_OAMethod @obj,'load', null,  @FilePath
 
EXEC @hr = sp_OASetProperty @obj,'Position', 0
EXEC @hr = sp_OASetProperty @obj,'charset', 'UTF-8'
EXEC @hr = sp_OAMethod @obj,'save', null,  @FilePath

-- убиваем
EXEC @hr = sp_OADestroy @obj;  
2 фев 19, 22:20    [21800576]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
Владислав Колосов
Member

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

жесть, я потом приходит обиженный пацанчик и при помощи sp_OACreate делает вам format c:
3 фев 19, 01:54    [21800651]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
pahanitto
Member

Откуда:
Сообщений: 28
Владислав Колосов,

правильно написали выше это тестовое задание и тут я заткнулся в этом месте. ну не пишу я цлрки.. моя стеля читать планы запросов или уж клиент... ну раз такая задачка...
16 фев 19, 13:12    [21811517]     Ответить | Цитировать Сообщить модератору
 Re: Странная задача... странный вопрос.... задача с ... XML MSSQL файловая  [new]
pahanitto
Member

Откуда:
Сообщений: 28
Владислав Колосов,
и да.... чтоб етого небыло от слова никада.... скл с клиента низя встроенным позволять вставлять... или динамическим
16 фев 19, 13:16    [21811521]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить