Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Нужна помощь с запросом SQL

v7: Нужна помощь с запросом SQL
Я
   АЛьФ
 
04.01.22 - 15:45
Надо загрузить ФИАС в SQL. Нашел по теме готовые скрипты: https://habr.com/ru/post/451720/
Все бы ничего, но там скрипты под SQL Server 2008, а у нас стоит 2005. Конкретно затык в использовании VALUES в Cross apply. Наша версия SQL такого еще не понимает.
Можно это дело как-то переписать? Ну, хотя бы доступным языком указать мне направление?
Первыми комментами дам тексты запросов, которые вызвали проблемы.
   АЛьФ
 
1 - 04.01.22 - 15:45
;WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema' as xs)
Select a.[table]
  ,tbl.[root_name]
  ,tbl.[root_description]
  ,tbl.[name]
  ,ROW_NUMBER() over (partition by a.[table] order by 1/0) N
  ,tbl.[column]
  ,tbl.[required]
  ,tbl.[description]
  ,tbl.[type]
  ,tbl.[len]
  ,Case tbl.[type]  
        when N'byte' then N'tinyint'
        when N'date' then N'date'
        when N'int'  then N'int'
        when N'string' then
                        Case when tbl.[len] = 36 and (tbl.[column] like N'%ID' or tbl.[column] = N'NORMDOC') then N'uniqueidentifier'
                            when tbl.[len] is Null then N'nvarchar(max)'
                        Else N'nvarchar(' + cast(tbl.[len] as nvarchar(4000)) + N')' END
        when N'integer' then
                        Case when tbl.[len] > 9 then N'bigint'
                             when tbl.[len] <= 4 then N'smallint'
                            Else N'int'
                        end
        else N'nvarchar(max)'
        End [sqltype]
  ,t.n.query('.') [node]
into dbo.[_FIAS]
from dbo.[_FIAS_SCHEMAS] a
    Cross apply a.x.nodes(//xs:attribute') t(n)

    Cross apply 
            (values -- некоторые поля используются несколько раз, поэтому сделаем так :) 
            (
                 x.value('(xs:schema[1]/xs:element[1]/@name)', 'nvarchar(255)')
                ,x.value('(xs:schema[1]/xs:element[1]/xs:annotation/xs:documentation[1]/text())[1]', 'nvarchar(4000)')
                ,x.value('(xs:schema[1]/xs:element[1]/xs:complexType[1]/xs:sequence[1]/xs:element[1]/@name)', 'nvarchar(255)')
                ,t.n.value('(./@name)[1]', 'nvarchar(255)')
                ,t.n.value('(./@use)[1]', 'nvarchar(255)') 
                ,Stuff(Coalesce(t.n.value('(./xs:simpleType/xs:restriction/@base)[1]', 'nvarchar(255)'), t.n.value('(./@type)[1]', 'nvarchar(255)')), 1, 3, '')
                ,Coalesce(t.n.value('(./xs:simpleType/xs:restriction/xs:length/@value)[1]', 'int')
                            ,t.n.value('(./xs:simpleType/xs:restriction/xs:maxLength/@value)[1]', 'int')
                            ,t.n.value('(./xs:simpleType/xs:restriction/xs:totalDigits/@value)[1]', 'int'))
                ,Replace(
                 Replace(
                 Replace(
                 Replace(
                 Replace(
                 Replace(
                 Replace(
                 Replace(
                 Replace(t.n.value('(./xs:annotation/xs:documentation)[1]', 'nvarchar(4000)'), '  ', ' ')
                 , '  ', ' ')
                 , '  ', ' ')
                 , '  ', ' ')
                 , '  ', ' ')
                 , '  ', ' ')
                 , '  ', ' ')
                 , '  ', ' ')
                 , '  ', ' ') 
            )
            ) tbl([root_name], [root_description], [name], [column], [required], [type], [len], [description])
   АЛьФ
 
2 - 04.01.22 - 15:46
Open cur
FETCH NEXT FROM cur into @table, @column

WHILE @@FETCH_STATUS = 0  
BEGIN
update a
Set x.modify('declare namespace ss="urn:schemas-microsoft-com:mapping-schema";            
insert (              
           attribute ss:field {sql:column("t.column")} 
           ,attribute ss:datatype {sql:column("b.sqltype")} 
        )             
into //xs:attribute[@name = sql:column("b.column")])[1]')

from dbo.[_FIAS_SCHEMAS] a
      inner join dbo.[_FIAS] b on a.[table] = b.[table]
      cross apply (Values(QUOTENAME(b.[column]))) t([column])
      Where b.[table] = @table and b.[column] = @column

FETCH NEXT FROM cur into @table, @column
END
CLOSE cur;  
DEALLOCATE cur;
   Ёпрст
 
3 - 04.01.22 - 16:49
(0) оконные функции 2005 не умеет вроде как..роупартишн
   youalex
 
4 - 04.01.22 - 16:57
Если не хочешь курить эти скриты и они факт работают на 2008 - подними копию базы на 2008 инстансе, выполни этот скрипт,  а потом просто перезалей данные в 2005 (перед этим копию сделать не повредит)
   АЛьФ
 
5 - 04.01.22 - 17:11
2(3) А?
2(4) К сожалению, не подойдет такое решение.
   youalex
 
6 - 04.01.22 - 17:18
Вот эта конструкция любопытная
order by 1/0 -- так можно/и зачем  ?
   АЛьФ
 
7 - 04.01.22 - 17:21
2(6) Для меня тут практически все китайская грамота. Надеялся, что с прошлой моей возни с ФИАСом появились работающие скрипты. А тут вон какая засада. У нас не запускаются.
   GreyK
 
8 - 04.01.22 - 17:30
(0) Вроде здесь не форум по SQL, да и как я помню вы свои фронты писали с использованием SQL. Зачем в 7ке использовать SQL запросы!?
   exwill
 
9 - 04.01.22 - 17:36
(6) Видимо, это означает "сортировать по последней колонке"
   АЛьФ
 
10 - 04.01.22 - 17:36
2(8) Какая прелесть... я так скучал по этому... Прям мимими...
   youalex
 
11 - 04.01.22 - 17:37
(9) и при этом не валится в исключение? Оригинально
   youalex
 
12 - 04.01.22 - 17:41
(7) тут основная китайщина в парсинге хмл средствами исключительно скуля. Как вариант можно хмл парсить другими средствами, msxmldom для 77 или ДокументХМЛ для 8.*, а в таблицы заливать уже нативные данные.  но это опять же придется курить изначальную логику. В качестве апа, скорее
   АЛьФ
 
13 - 04.01.22 - 17:51
2(12) Спасибо. Боюсь, что если делать загрузку сотни гигов средствами 1С, то это все помрет уже на втором десятке.
   FN
 
14 - 04.01.22 - 18:00
Конвертнуть в csv и загрузить?
Вот сходу нагуглил онлайн-конвертер https://www.aconvert.com/ru/document/xml-to-csv/
   GreyK
 
15 - 04.01.22 - 18:20
(10) Обычно все ваши мимишные терабайты ужимаются до мегабайтов в 7ке, ну может я и не прав, но подскажите мне каков будет размер базы SQL после загрузки ваших гигабайтов?
   АЛьФ
 
16 - 04.01.22 - 18:27
2(14) Что конвертнуть? Триста гигов xml?
2(15) Никогда ФИАС не видел? Бывает...
   Ёпрст
 
17 - 05.01.22 - 10:18
(0) ну шо, переделал запрос?
Зы: быстрее так-то версию скуля поднять, а то щас кучка примеров, которые ужо и в 2008 не работают, приходилось переписывать
   АЛьФ
 
18 - 05.01.22 - 10:46
2(17) Не. Старым методом загрузки воспользовался. Правлю сейчас схемы.

Список тем форума
 
Ошибка? Это не ошибка, это системная функция.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.