powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Процедура
25 сообщений из 82, страница 3 из 4
Процедура
    #38761224
lcanl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, Таблица на четверть полная, из 1с я обрабатывал эти запросы но вся проблема состоит в том что это очень долго вот и сказали перейти непосредственно в mssql
...
Рейтинг: 0 / 0
Процедура
    #38761231
lcanl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lcanl, Сейчас попытаюсь объяснить:
Код: sql
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.
Функция ПолучитьАдрФИАС(aoid)
ун_код = aoid;
Если ПустаяСтрока(ун_код) Тогда
    Возврат "";
КонецЕсли;    
ConnectionRAR = Новый COMОбъект("ADODB.Connection"); 
ConnectionRAR.Open
Str = Новый COMОбъект("ADODB.RecordSet");
Str.Open("SELECT * FROM FIAS_ADDROBJ WHERE AOID = '" + ун_код + "'",ConnectionRAR);  
стр_возвр = "";
Пока Str.EOF() = 0 Цикл 
    стр_возвр = "" + УбратьКав(Str.Fields("FORMALNAME").Value) + " " + Str.Fields("SHORTNAME").Value;
    родитель = Str.Fields("PARENTGUID").Value;
    Str.MoveNext(); 
КонецЦикла; 

Для иии = 1 По 7 Цикл 
    Если родитель = """" + """" Тогда
        Возврат стр_возвр;
        Прервать;
    КонецЕсли;
    Str = Новый COMОбъект("ADODB.RecordSet");
    Str.Open("SELECT * FROM FIAS_ADDROBJ WHERE AOGUID = '" + родитель + "' AND ACTSTATUS = 1",ConnectionRAR);  
    Пока Str.EOF() = 0 Цикл 
         стр_возвр= "" + УбратьКав(Str.Fields("FORMALNAME").Value) + " " + Str.Fields("SHORTNAME").Value + " " + стр_возвр;
        родитель = Str.Fields("PARENTGUID").Value;
        Str.MoveNext(); 
    КонецЦикла; 
КонецЦикла; 
ConnectionRAR.Close();
Возврат стр_возвр;

КонецФункции



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Процедура ПроставитьАдресаФИАС(Элемент)
ConnectionRAR1 = Новый COMОбъект("ADODB.Connection"); 
ConnectionRAR1.Open
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = ConnectionRAR1;
Для каждого стр Из ТаблицаПартий3 Цикл 
    Если (НЕ ПустаяСтрока(стр.aoid)) И ПустаяСтрока(стр.fias_name) Тогда
        Сообщить("!!!!!!!!!!    " + стр.rtt_addr);    
        адр_фиас = ПолучитьАдрФИАС(стр.aoid);
        Command.CommandText =  "USE licenses; UPD ATE RTT_net SET fias_name = '" + адр_фиас + "' WH ERE id = " + УбратьПробелы(Строка(стр.id));
        Command.Execute();
    КонецЕсли;
КонецЦикла; 
ConnectionRAR1.Close();
КонецПроцедуры




Отсюда видимо что 5 это FORMALNAME SHORTNAME PARENTGUID AOID и AOGUID
...
Рейтинг: 0 / 0
Процедура
    #38761236
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, из ТСа долго выковыривать http://wiki.gis-lab.info/w/ФИАС#ADDROBJ
но imho все это бессмысленно, пока он не прочитает хоть что-то по SQL
...
Рейтинг: 0 / 0
Процедура
    #38761241
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lcanl
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Процедура ПроставитьАдресаФИАС(Элемент)
ConnectionRAR1 = Новый COMОбъект("ADODB.Connection"); 
ConnectionRAR1.Open
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = ConnectionRAR1;
>>>Для каждого стр Из ТаблицаПартий3 Цикл 
    Если (НЕ ПустаяСтрока(стр.aoid)) И ПустаяСтрока(стр.fias_name) Тогда
        Сообщить("!!!!!!!!!!    " + стр.rtt_addr);    
        адр_фиас = ПолучитьАдрФИАС(стр.aoid);
        Command.CommandText =  "USE licenses; UPD ATE RTT_net SET fias_name = '" + адр_фиас + "' WH ERE id = " + УбратьПробелы(Строка(стр.id));
        Command.Execute();
    КонецЕсли;
КонецЦикла;<<< 
ConnectionRAR1.Close();
КонецПроцедуры

О! Есть некая ТаблицаПартий, что хранит aoid (идентификатор адресного объекта) и ещё какой-то идентифкатор (стр.id).

И походу задача состоит в том, чтобы в ТаблицуПартий занести данные адресного объекта, соответсвующие стр.aoid , из ФИАС в виде строки.
...
Рейтинг: 0 / 0
Процедура
    #38761242
lcanl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, Да, только в этом случае таблицапартий это rtt_net и колонка fias_name
...
Рейтинг: 0 / 0
Процедура
    #38761255
lcanl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,
Я так понимаю что на этом примере:
-- сбор всех parentguid
WITH all_parents AS (
SELECT DISTINCT parentguid
FROM addrobj
WHERE (currstatus = 0) AND (parentguid IS NOT NULL)
)
-- выбор элементов самого нижнего уровня (не входящих в список all_parents)
-- и получение полного адреса
SELECT (make_full(aoid)).*
FROM addrobj
WHERE (currstatus = 0) AND (aoguid NOT IN (SELECT parentguid FROM all_parents))

Можно разложить древо и потом результат записать в колонку?
...
Рейтинг: 0 / 0
Процедура
    #38761272
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lcanl, Вы запросы-то умеете выполнять в SQL Management Studio?
...
Рейтинг: 0 / 0
Процедура
    #38761287
lcanl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, Выполнять умею писать не очень)
...
Рейтинг: 0 / 0
Процедура
    #38761891
lcanl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем получилось вот такое:
Код: sql
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.
create proc ID2Fias
@id int
as
declare
@str   varchar(2048),
@aoid  varchar(2048),
@parentid varchar(2048),
@i int

select @aoid = AOID
from rtt_net7
where id = @id

SELECT 
  @str = FORMALNAME + ' '+ SHORTNAME, -- Кавычки
  @parentid = PARENTGUID 
FROM FIAS_ADDROBJ 
WHERE AOID = @aoid 

select @i = 0

while @i < 7
begin
if not isnull(@parentid,'""') = '""'
    select 
	   @str = FORMALNAME + ' '+ SHORTNAME + ' '+ @str,
	   @parentid = PARENTGUID 
	   from FIAS_ADDROBJ WHERE AOGUID = @parentid AND ACTSTATUS = 1   
select @i = @i + 1
end

select @str

update rtt_net7 
set fias_name = @str
where id = @id


go



Вопрос: Как это все сделать в "цикле" используя FETCH и CURSORS
...
Рейтинг: 0 / 0
Процедура
    #38761896
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lcanl,

зачем вам курсор ? Туту по виду и цикл то не нужен в чистом виде..будет достаточно сте-шки +апдейт
...
Рейтинг: 0 / 0
Процедура
    #38761906
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lcanl, вы открывали ссылку про ФИАС из моего прошлого комментария? там есть запросы без всяких курсоров
...
Рейтинг: 0 / 0
Процедура
    #38761913
lcanl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxx, Да вот сказали сделать так, скажите еще пожалуйста в версии mssql возможно сделать рекурсивный запрос?
И если есть все таки пример по фетчу и курсорам можете скинуть или натолкнуть как сделать?
...
Рейтинг: 0 / 0
Процедура
    #38761916
lcanl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shakill, Она у меня открыта, но мне сказали что рекурсивов нет в mssql)
...
Рейтинг: 0 / 0
Процедура
    #38761922
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lcanlMaxx, Да вот сказали сделать так, скажите еще пожалуйста в версии mssql возможно сделать рекурсивный запрос?
http://msdn.microsoft.com/en-us/library/ms175972.aspx
Пример D
...
Рейтинг: 0 / 0
Процедура
    #38761923
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lcanlShakill, Она у меня открыта, но мне сказали что рекурсивов нет в mssql)
select @@VERSION покажите
...
Рейтинг: 0 / 0
Процедура
    #38761924
_djХомяГ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если это правда
авторMicrosoft SQL Server 2014 - 12.0.2000.8 (X64)
Feb 20 2014 20:04:26
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

То Вас дезинформируют
...
Рейтинг: 0 / 0
Процедура
    #38761931
lcanl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_djХомяГ, Это так, читал что действительно рекурсивные запросы есть. Но сказали делать так. Вот пытаюсь сделать.
...
Рейтинг: 0 / 0
Процедура
    #38761938
lcanl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxx, Это я понял) это рекурсивный запрос, а есть примеры использования процедуры в fetch и cursor?
...
Рейтинг: 0 / 0
Процедура
    #38761944
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lcanlцедуры в fetch и cursor?
есть..но в данном случае - ето путь в никуда вообще
...
Рейтинг: 0 / 0
Процедура
    #38761948
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lcanlMaxx, Это я понял) это рекурсивный запрос, а есть примеры использования процедуры в fetch и cursor?забудьте про курсоры пока не освоите написание запросов
...
Рейтинг: 0 / 0
Процедура
    #38761951
lcanl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shakill,Потихоньку осваиваю все таки к чему то пришел за ночь, теперь нужно как раз освоить как работать с курсорами на примере процедуры которую я написал)
...
Рейтинг: 0 / 0
Процедура
    #38761959
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lcanlShakill,Потихоньку осваиваю все таки к чему то пришел за ночь, теперь нужно как раз освоить как работать с курсорами на примере процедуры которую я написал)не нужны тут курсоры, вас обманули
...
Рейтинг: 0 / 0
Процедура
    #38761962
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курсоры любят ораклоиды.
Тут их не очень-то любят.
...
Рейтинг: 0 / 0
Процедура
    #38761965
lcanl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shakill,Вот я нашел такой пример:
Код: sql
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.
CREATE TABLE #TMP
(
   ii int
)
GO

INSERT INTO #TMP(ii) VALUES(1)
INSERT INTO #TMP(ii) VALUES(2)
INSERT INTO #TMP(ii) VALUES(3)

GO

--Create a cursor.
DECLARE cur CURSOR
FOR SELECT * FROM #TMP

--Display the status of the cursor before and after opening
--closing the cursor.

SELECT CURSOR_STATUS('global','cur') AS 'After declare'
OPEN cur
SELECT CURSOR_STATUS('global','cur') AS 'After Open'
CLOSE cur
SELECT CURSOR_STATUS('global','cur') AS 'After Close'

--Remove the cursor.
DEALLOCATE cur

--Drop the table.
DROP TABLE #TMP



Как сюда грубо говоря вставить процедуру? Извиняюсь если не правильно написал.

Да я бы с радостью от них отказался но сказали сделать что тут поделаешь.
...
Рейтинг: 0 / 0
Процедура
    #38761976
lcanl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lcanl, Вот этот вариант вроде лучше:
Код: sql
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.
CREATE PROCEDURE [dbo].[sp_UpdateCouponCount]
AS

Declare     @couponCount int,
            @CouponName nvarchar(50),
            @couponIdFromQuery int


Declare curP cursor For

  select COUNT(*) as totalcount , Name as name,couponuse.couponid  as couponid from Coupon as coupon 
  join CouponUse as couponuse on coupon.id = couponuse.couponid
  where couponuse.id=@cuponId
  group by couponuse.couponid , coupon.Name

OPEN curP 
Fetch Next From curP Into @couponCount, @CouponName,@couponIdFromQuery

While @@Fetch_Status = 0 Begin

    print @couponCount
    print @CouponName

    update Coupon SET NoofUses=@couponCount
    where couponuse.id=@couponIdFromQuery


Fetch Next From curP Into @couponCount, @CouponName,@couponIdFromQuery

End -- End of Fetch

Close curP
Deallocate curP



Тут код процедуры нормально должен встать?
...
Рейтинг: 0 / 0
25 сообщений из 82, страница 3 из 4
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Процедура
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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