logoff | Дата: Среда, 11.05.2011, 17:32 | Сообщение # 1 |
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
| Скрипт для среды: MS SQL STANDART Code USE [bn_patp_dob] -- имя базы данных где будет создана процедура GO /****** Object: StoredProcedure [dbo].[save_KML_GE] Script Date: 05/11/2011 16:07:24 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO
-- ============================================= -- Author: <Бондарь Михаил> -- Create date: 11/05/2011 -- Description: Выгрузка информации об остановках в gpx для экспорта в JOSM -- ============================================= Create PROCEDURE [dbo].[save_GPX_busStops] -- Add the parameters for the stored procedure here AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON;
/* версия от 11-05-2011
*/ declare @filename as varchar(3000) declare @file_description as varchar(3000) declare @p_caption varchar(64), @bp_name varchar(64),@md_ord int; -- для курсоров
-- тут имя файла!!! set @filename='E:\sendCB_toFTP\bus_stop.gpx' -- имя выходного файла - сюда сервер запишет результат
DECLARE @Text1 Nvarchar(max), @FS int, @OLEResult int, @FileID int, @hr int, @source varchar(30), @desc varchar (200)
EXECUTE @OLEResult = sp_OACreate 'Scripting.FileSystemObject', @FS OUTPUT
IF @OLEResult <> 0 BEGIN PRINT 'Scripting.FileSystemObject' GOTO Error_Handler END
execute @OLEResult = sp_OAMethod @FS,'CreateTextFile',@FileID OUTPUT, @filename,1,true IF @OLEResult <> 0 BEGIN PRINT 'CreateTextFile' GOTO Error_Handler END -- тег <Style> </Style> задает внешний вид точек и путей - используется для placemark set @Text1 = N'<?xml version="1.0"?> <gpx version="1.0" creator="ExpertGPS 1.1 - http://www.topografix.com " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/0" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd "> <time>2002-02-27T17:18:33Z</time> ' execute @OLEResult = sp_OAMethod @FileID, 'WriteLine', NULL, @Text1 IF @OLEResult <> 0 BEGIN PRINT 'WriteLine' GOTO Error_Handler END
declare @id int; -- экспортируем данные об остановках declare cur_zone cursor local read_only for -- обявляем курсор -- select z.id, z.name,'' from bn_patp.dbo.PATP_BasePoint as Z -- order by z.name -- в алфавитном порядке select p.id, p.long, p.lat, p.name,'' from bn_patp.dbo.patp_basepoint as p order by name;
open cur_zone print 'выводим Остановки' print '-------------------'
declare @zone_id int -- данные о ид зоны из курсора declare @zone_name Nvarchar(256) -- данные о имени зоны из курсора
-- данные о центральной (первой точке) зоны - это центр окружности declare @zone_long float declare @zone_lat float declare @zone_img Nvarchar (500)
DECLARE @zone_desc NVARCHAR(MAX) ;
--declare @stop_table table( --m_name varchar(100), --stop_id int --)
--insert into @stop_table --select m.name,p.stop_id as td from bn_patp.dbo.patp_points as p -- inner join bn_patp.dbo.PATP_MarshrutData as md on md.point_id=p.id -- inner join bn_patp.dbo.PATP_MarshrutList as ML on ML.id=MD.mlist_id -- inner join bn_patp.dbo.PATP_Marshruts as M on M.id=ML.marshrut_id and m.active=1 -- inner join bn_patp.dbo.RISTK_MarshrutReestr as MR on MR.Marshrut_id=m.id -- where p.stop_id is not null -- order by m.name,p.stop_id
fetch next from cur_zone into @zone_id,@zone_long,@zone_lat,@zone_name,@zone_img while @@fetch_status=0 begin
-- выборка данных об остановке. -- select top 1 @zone_long=Long,@zone_lat=Lat from bn_patp.dbo.PATP_BasePoint -- where id=@zone_id; -- print @zone_name+' ; '+@zone_img
set @Text1 = N' <wpt lat="'+str(@zone_lat,15,8)+N'" lon="'+str(@zone_long,15,8)+N'"> <name>'+@zone_name+N'</name> </wpt>'; -- print @text1 execute @OLEResult = sp_OAMethod @FileID, 'WriteLine', NULL, @Text1 IF @OLEResult <> 0 BEGIN PRINT 'WriteLine' GOTO Error_Handler END
fetch next from cur_zone into @zone_id,@zone_long,@zone_lat,@zone_name,@zone_img end -- open cur_zone while @@fetch_status=0 begin
close cur_zone
set @Text1 = N'</wpt>' -- print @text1 execute @OLEResult = sp_OAMethod @FileID, 'WriteLine', NULL, @Text1 IF @OLEResult <> 0 BEGIN PRINT 'WriteLine' GOTO Error_Handler END
goto Done
Error_Handler: PRINT '*** ERROR ***' EXEC @hr = sp_OAGetErrorInfo null, @source OUT, @desc OUT SELECT hr = CONVERT (binary(4), @hr), source = @source, description = @desc
Done: EXECUTE @OLEResult = sp_OADestroy @FileID EXECUTE @OLEResult = sp_OADestroy @FS
END где USE [bn_patp_dob] -- имя базы данных где будет создана процедура,у меня все мои наработки находятся отдельно от основной базы данных set @filename='E:\sendCB_toFTP\bus_stop.gpx' -- тут путь и имя файла, куда будет выгрузка - этот файл потребуется с сервера забрать путь должен быть доступен для сервера!!! (а не для вашего клиента) Для запуска можно использовать код: Code DECLARE @RC int
-- TODO: задайте здесь значения параметров.
EXECUTE @RC = [bn_patp_dob].[dbo].[save_GPX_busStops] GO
|
|
| |