13.12.2017
Эффективная Навигация М2М
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум (скрипты, вопросы...) » CyberFleet » Скрипты для CyberFleet, CrossPoint » Импорт данных из csv в базу данных (Скрипт 2 из набора скриптов Импорта/экспорта данных между БД)
Импорт данных из csv в базу данных
logoffДата: Воскресенье, 30.01.2011, 13:39 | Сообщение # 1
Тамбов
Группа: Администраторы
Сообщений: 652
Репутация: 19
Статус: Offline
Как дополнение к статье "Импорт данных в КиберФлит"
Скрипт прозводит загрузку данных из предварительно сформированного файла
Среда выполнение: MS SQL
Внимание!!! Содержимое базы данных будет ИЗМЕНЕНО!!!
Создайте архивную копию ваших данных!
Применять на свой страх и риск!!!

Code

/* скоипт загрузики данных о таррировке, датчиках, приборах и машинах
ПЕРЕД ЗАПУСКОМ СКРИПТА СОЗДАЙТЕ АРХИВНУЮ КОПИЮ БАЗЫ!!!!
ПЕРЕД ЗАПУСКОМ СКРИПТА СОЗДАЙТЕ АРХИВНУЮ КОПИЮ БАЗЫ!!!!
ПЕРЕД ЗАПУСКОМ СКРИПТА СОЗДАЙТЕ АРХИВНУЮ КОПИЮ БАЗЫ!!!!

Скрипт обновляет и при необходимости создает данные
   - АТ идентификация по коду прибора
   - Транспорт идентификация по коду прибора и deviceactive=1
   - Датчик - идентификация по номеру, типу (аналоговый\цифровой) и коду прибора
   - тарировка идентификация по датчику

при загрузке таррировки все данные о ней полностью очищаются для загружаемых приборов
Загрузка идет из файл   
      FROM 'd:\55.csv' -- из файла !!!! исправлять тут
который выгружается скриптом части 1
             
*/
                      
use bn -- работа с таблицей BN
go

if (not object_id('tempdb..#temp') IS NULL)   
drop table #temp

if (not object_id('tempdb..#object') IS NULL)   
drop table #object

if (not object_id('tempdb..#sens') IS NULL)   
drop table #sens

if (not object_id('tempdb..#device') IS NULL)   
drop table #device

--BEGIN TRAN T1; -- работа с транзакцией - если что пойдет не так, записи не будут произведены
-- временная таблица для файла
create table #temp (AT_IDSensor varchar(16),
AT_MinValue_Real varchar(16) NULL,
AT_MaxValue_Real varchar(16) NULL,
AT_MinValue_Tar varchar(16) NULL,
AT_MaxValue_Tar varchar(16) NULL,
S_device_id varchar(16) NULL,
S_num varchar(16) NULL,
s_sensor_type_id varchar(16) NULL,
s_IsAlarm varchar(16),   
s_description varchar(128),
s_IconID varchar(16),
s_SensFuelConsWin varchar(16),
s_SensFuelConsSum varchar(16),
s_SaveAsEvent varchar(16),
s_SensValue varchar(16),
s_priority varchar(16),
s_Units varchar(24),
s_SensorActive varchar(16),
s_HasOwnTank varchar(16),
s_MinValue varchar(16),
s_MaxValue varchar(16),
s_SensorClassificationId varchar(16),
s_ObjectExtStatusID varchar(16),
s_MapColor varchar(16),
s_TableColor varchar(16),
s_SignFontName varchar(20),
s_SignCharCode varchar(16),
s_tele_time varchar(32),
s_progress_total varchar(16),
D_id varchar(16),
d_type_id varchar(16),
d_code varchar(16),
d_name varchar(32),
d_opt_int1 varchar(16),
d_opt_int2 varchar(16),
d_opt_int3 varchar(16),
d_tel_number char (50),
d_IsGSM varchar(16),
d_SimNum varchar(16),
O_ObjectID varchar(16),
O_MarkCarID varchar(16),
O_ObjectGarNum varchar(20),
O_ObjectGosNum varchar(20),
O_ObjectType varchar(40),
O_ObjectVIN varchar(20),
O_ObjectNumMotor varchar(20),
O_ObjectNumChass varchar(20),
O_ObjectNumColum varchar(16),
O_ObjectGarTrailerNum  varchar(20),
O_ObjectGOSTrailerNum varchar(20),
O_ObjectOSAGOCode varchar(20),
O_ObjectLicenCardNum varchar(20),
O_ObjectLicenCardRegNum varchar(20),
O_ObjectLicenCardSeria varchar(20),
O_ObjectLicenCardType varchar(16),
O_ObjectNumBody varchar(20),
o_IgnitionSensorID varchar(16),
O_DynamicTracePointCnt varchar(16),
O_RefuelingThreshold varchar(16)
) --
-- чтение файла
BULK INSERT #temp -- вставка из файла во временную таблицу
      FROM 'd:\55.csv' -- из файла !!!! исправлять тут
      WITH   
      (   
          FIELDTERMINATOR=';', -- разделитель полей - exel именно с ним выгружает
    FIRSTROW = 1, -- с первой строки
          ROWTERMINATOR = '\n' -- разделитель строк enter
      )

--select * from #temp

-- временная таблица для машин из файла

create table #object (
d_code varchar(16),
O_ObjectID varchar(16),
O_MarkCarID varchar(16),
O_ObjectGarNum varchar(20),
O_ObjectGosNum varchar(20),
O_ObjectType varchar(40),
O_ObjectVIN varchar(20),
O_ObjectNumMotor varchar(20),
O_ObjectNumChass varchar(20),
O_ObjectNumColum varchar(16),
O_ObjectGarTrailerNum  varchar(20),
O_ObjectGOSTrailerNum varchar(20),
O_ObjectOSAGOCode varchar(20),
O_ObjectLicenCardNum varchar(20),
O_ObjectLicenCardRegNum varchar(20),
O_ObjectLicenCardSeria varchar(20),
O_ObjectLicenCardType varchar(16),
O_ObjectNumBody varchar(20),
o_IgnitionSensorID varchar(16),
O_DynamicTracePointCnt varchar(16),
O_RefuelingThreshold varchar(16))

-- заполнение временной таблицы машин из файла
insert into #object (
d_code,
O_ObjectID ,
O_MarkCarID ,
O_ObjectGarNum ,
O_ObjectGosNum ,
O_ObjectType ,
O_ObjectVIN ,
O_ObjectNumMotor ,
O_ObjectNumChass,
O_ObjectNumColum ,
O_ObjectGarTrailerNum ,
O_ObjectGOSTrailerNum ,
O_ObjectOSAGOCode ,
O_ObjectLicenCardNum ,
O_ObjectLicenCardRegNum,
O_ObjectLicenCardSeria,
O_ObjectLicenCardType ,
O_ObjectNumBody,
o_IgnitionSensorID ,
O_DynamicTracePointCnt,
O_RefuelingThreshold )
select DISTINCT   
d_code,
O_ObjectID ,
O_MarkCarID ,
O_ObjectGarNum ,
O_ObjectGosNum ,
O_ObjectType ,
O_ObjectVIN ,
O_ObjectNumMotor ,
O_ObjectNumChass,
O_ObjectNumColum ,
O_ObjectGarTrailerNum ,
O_ObjectGOSTrailerNum ,
O_ObjectOSAGOCode ,
O_ObjectLicenCardNum ,
O_ObjectLicenCardRegNum,
O_ObjectLicenCardSeria,
O_ObjectLicenCardType ,
O_ObjectNumBody,
o_IgnitionSensorID ,
O_DynamicTracePointCnt,
O_RefuelingThreshold   
from #temp

-- временная таблица сенсоров
create table #sens  -- таблица сенсоров с привязкой к приборам
(S_device_id varchar(16) NULL,
S_num varchar(16) NULL,
s_sensor_type_id varchar(16) NULL,
s_IsAlarm varchar(16),   
s_description varchar(128),
s_IconID varchar(16),
s_SensFuelConsWin varchar(16),
s_SensFuelConsSum varchar(16),
s_SaveAsEvent varchar(16),
s_SensValue varchar(16),
s_priority varchar(16),
s_Units varchar(24),
s_SensorActive varchar(16),
s_HasOwnTank varchar(16),
s_MinValue varchar(16),
s_MaxValue varchar(16),
s_SensorClassificationId varchar(16),
s_ObjectExtStatusID varchar(16),
s_MapColor varchar(16),
s_TableColor varchar(16),
s_SignFontName varchar(20),
s_SignCharCode varchar(16),
s_tele_time varchar(32),
s_progress_total varchar(16),
d_code varchar(16)
)
-- заполнение временной таблицы сенсоров

insert into #sens (
S_device_id ,
S_num ,
s_sensor_type_id ,
s_IsAlarm ,   
s_description ,
s_IconID ,
s_SensFuelConsWin ,
s_SensFuelConsSum,
s_SaveAsEvent ,
s_SensValue ,
s_priority ,
s_Units ,
s_SensorActive ,
s_HasOwnTank,
s_MinValue ,
s_MaxValue ,
s_SensorClassificationId,
s_ObjectExtStatusID ,
s_MapColor ,
s_TableColor ,
s_SignFontName,
s_SignCharCode ,
s_tele_time,
s_progress_total,
d_code)
select DISTINCT   
S_device_id ,
S_num ,
s_sensor_type_id ,
s_IsAlarm ,   
s_description ,
s_IconID ,
s_SensFuelConsWin ,
s_SensFuelConsSum,
s_SaveAsEvent ,
s_SensValue ,
s_priority ,
s_Units ,
s_SensorActive ,
s_HasOwnTank,
s_MinValue ,
s_MaxValue ,
s_SensorClassificationId,
s_ObjectExtStatusID ,
s_MapColor ,
s_TableColor ,
s_SignFontName,
s_SignCharCode ,
s_tele_time,
s_progress_total,
d_code
from #temp

create table #device (
D_id varchar(16),
d_type_id varchar(16),
d_code varchar(16),
d_name varchar(32),
d_opt_int1 varchar(16),
d_opt_int2 varchar(16),
d_opt_int3 varchar(16),
d_tel_number char (50),
d_IsGSM varchar(16),
d_SimNum varchar(16))

insert into #device (
D_id ,
d_type_id ,
d_code ,
d_name ,
d_opt_int1 ,
d_opt_int2 ,
d_opt_int3 ,
d_tel_number,
d_IsGSM ,
d_SimNum )
select DISTINCT   
D_id ,
d_type_id ,
d_code ,
d_name ,
d_opt_int1 ,
d_opt_int2 ,
d_opt_int3 ,
d_tel_number,
d_IsGSM ,
d_SimNum   
from #temp

-- и так имеем   
-- таблица #temp - содержит тестовые данные из файла
-- таблица #object - список ТС с реквизитами из таблицы #temp
-- таблица #device - список приборов с реквизитами из таблицы #temp

-- начнем с таблицы #device
-- получим таблицу в курсор для работы
declare @device_code varchar(16)
declare @device_id int

DECLARE cur CURSOR LOCAL FOR
    SELECT d_code FROM #device
      
   OPEN cur -- открытие курсора   
    FETCH NEXT FROM cur INTO @device_code
    WHILE (@@FETCH_STATUS = 0) -- цикл
      BEGIN
   -- проверка, что девайс существует
    if not exists
    (
      select *
      from SYS_DEV_Device TSDD   
    where TSDD.code=@device_code
          and TSDD.DeviceActive=1
    )
    begin
   --insert into  SYS_DEV_Device     
    print ('не существует АТ - добавляем')
    print (@device_code)
    insert into sys_dev_device -- вставка в список девайсов в указанные колонки
    (type_id,   
          code,
    name,
    opt_int1, -- зн 120
    opt_int2, -- зн 120
    opt_int3, -- зн 0
    tel_number,
    isgsm,
    SimNum,
          DeviceActive)
    select -- из результата запроса
    d_type_id,   
        d_code,
    case d_name when 'NULL' then null else d_name end,
    case d.d_opt_int1 when 'NULL' then null else cast(d.d_opt_int1 as int) end, -- зн 120
    case d.d_opt_int2 when 'NULL' then null else cast(d.d_opt_int2 as int)end, -- зн 120
    case d.d_opt_int3 when 'NULL' then null else cast(d.d_opt_int3 as int)end, -- зн 0
    case d.d_tel_number when 'NULL' then NULL else d.d_tel_number end,
    case d.d_isgsm when 'NULL' then NULL else d.d_isgsm end,
    case d.d_SimNum when 'NULL' then NULL else d.d_SimNum end,
          1 as DeviceActive
    from #device as d-- из таблицы темп
    where d_code=@device_code

    end -- if not exists   
    else
    begin
    print ('существует АТ - обновляем')
    print (@device_code)
     Update SYS_DEV_Device
     set
       type_id=d.d_type_id,
      name=case d.d_name when 'NULL' then null else d.d_name end,
      opt_int1=case d.d_opt_int1 when 'NULL' then null else cast(d.d_opt_int1 as int) end, -- зн 120
      opt_int2=case d.d_opt_int2 when 'NULL' then null else cast(d.d_opt_int2 as int)end, -- зн 120
      opt_int3=case d.d_opt_int3 when 'NULL' then null else cast(d.d_opt_int3 as int)end, -- зн 0
      tel_number=case d.d_tel_number when 'NULL' then NULL else d.d_tel_number end,
      isgsm=case d.d_isgsm when 'NULL' then NULL else d.d_isgsm end,
      SimNum=case d.d_SimNum when 'NULL' then NULL else d.d_SimNum end
      from SYS_DEV_Device inner join #device as d on d.d_code=code
      where
        code=@device_code
        and DeviceActive=1
    end -- else if not exists
     
-- теперь получаем данные о машине, и обновляем
      
   set @device_id=(select id from sys_dev_device where code=@device_code and deviceactive=1)
-- проверка, что сущестует объект   
if not exists
    (
      select *
      from FLEET_Object O   
    where O.device_id=@device_id
          and O.ObjectActive=1
    )
    begin
print ('вставка ТС ')
    insert into FLEET_Object -- вставка в список девайсов в указанные колонки
(Device_ID,
MarkCarID ,
ObjectGarNum ,
ObjectGosNum ,
ObjectType ,
ObjectVIN ,
ObjectNumMotor ,
ObjectNumChass,
ObjectNumColum ,
ObjectGarTrailerNum ,
ObjectGOSTrailerNum ,
ObjectOSAGOCode ,
ObjectLicenCardNum ,
ObjectLicenCardRegNum,
ObjectLicenCardSeria,
ObjectLicenCardType ,
ObjectNumBody,
IgnitionSensorID ,
DynamicTracePointCnt,
RefuelingThreshold,   
        ObjectActive)
    select -- из результата запроса
    @device_id,
    CASE O_MarkCarID
           WHEN 'NULL' THEN null
           ELSE cast (O_MarkCarID as int)
        END,
    case o_ObjectGarNum when 'NULL' then NULL else o_ObjectGarNum end,
    case o_ObjectGosNum when 'NULL' then NULL else o_ObjectGosNum end,
    case o_ObjectType when 'NULL' then NULL else o_ObjectType end,
    case o_ObjectVIN when 'NULL' then NULL else o_ObjectVIN end ,
    case o_ObjectNumMotor when 'NULL' then NULL else o_ObjectNumMotor end,
    case o_ObjectNumChass when 'NULL' then NULL else o_ObjectNumChass end,
    CASE o_ObjectNumColum WHEN 'NULL' THEN null ELSE cast (o_ObjectNumColum as int) END,
    case o_ObjectGarTrailerNum when 'NULL' then NULL else o_ObjectGarTrailerNum end,
    case o_ObjectGOSTrailerNum when 'NULL' then NULL else o_ObjectGOSTrailerNum end,
    case o_ObjectOSAGOCode when 'NULL' then NULL else o_ObjectOSAGOCode end,
    case o_ObjectLicenCardNum when 'NULL' then NULL else o_ObjectLicenCardNum  end,
    case o_ObjectLicenCardRegNum when 'NULL' then NULL else o_ObjectLicenCardRegNum end,
    case o_ObjectLicenCardSeria when 'NULL' then NULL else o_ObjectLicenCardSeria end,
    CASE o_ObjectLicenCardType WHEN 'NULL' THEN null ELSE cast (o_ObjectLicenCardType as int) END,
    case o_ObjectNumBody when 'NULL' then NULL else o_ObjectNumBody end,

    IgnitionSensorID=CASE o_IgnitionSensorID WHEN 'NULL' THEN null ELSE cast (o_IgnitionSensorID as int)END,

    --O_DynamicTracePointCnt,
CASE O_DynamicTracePointCnt
           WHEN 'NULL' THEN null
           ELSE cast (O_DynamicTracePointCnt as int)
        END,
    --O_RefuelingThreshold,   
CASE O_RefuelingThreshold
           WHEN 'NULL' THEN null
           ELSE cast (O_RefuelingThreshold as int)
        END,
    1 as ObjectActive
    from #object where d_code=@device_code

    end
    else --if not exists объект
    begin
print ('обновляем ТС');      
Update FLEET_Object
      set
      
    MarkCarID=CASE o_MarkCarID
           WHEN 'NULL' THEN null
           ELSE cast (o_MarkCarID as int)
        END,
    ObjectGarNum=case o_ObjectGarNum when 'NULL' then NULL else o_ObjectGarNum end,
    ObjectGosNum=case o_ObjectGosNum when 'NULL' then NULL else o_ObjectGosNum end,
    ObjectType=case o_ObjectType when 'NULL' then NULL else o_ObjectType end,
    ObjectVIN=case o_ObjectVIN when 'NULL' then NULL else o_ObjectVIN end ,
    ObjectNumMotor=case o_ObjectNumMotor when 'NULL' then NULL else o_ObjectNumMotor end,
    ObjectNumChass=case o_ObjectNumChass when 'NULL' then NULL else o_ObjectNumChass end,
    ObjectNumColum=CASE o_ObjectNumColum WHEN 'NULL' THEN null ELSE cast (o_ObjectNumColum as int) END,
    ObjectGarTrailerNum=case o_ObjectGarTrailerNum when 'NULL' then NULL else o_ObjectGarTrailerNum end,
    ObjectGOSTrailerNum=case o_ObjectGOSTrailerNum when 'NULL' then NULL else o_ObjectGOSTrailerNum end,
    ObjectOSAGOCode=case o_ObjectOSAGOCode when 'NULL' then NULL else o_ObjectOSAGOCode end,
    ObjectLicenCardNum=case o_ObjectLicenCardNum when 'NULL' then NULL else o_ObjectLicenCardNum  end,
    ObjectLicenCardRegNum=case o_ObjectLicenCardRegNum when 'NULL' then NULL else o_ObjectLicenCardRegNum end,
    ObjectLicenCardSeria=case o_ObjectLicenCardSeria when 'NULL' then NULL else o_ObjectLicenCardSeria end,
    ObjectLicenCardType=CASE o_ObjectLicenCardType WHEN 'NULL' THEN null ELSE cast (o_ObjectLicenCardType as int) END,
    ObjectNumBody=case o_ObjectNumBody when 'NULL' then NULL else o_ObjectNumBody end,

    IgnitionSensorID=CASE o_IgnitionSensorID WHEN 'NULL' THEN null ELSE cast (o_IgnitionSensorID as int)END,
    DynamicTracePointCnt=CASE o_DynamicTracePointCnt
           WHEN 'NULL' THEN null
           ELSE cast (o_DynamicTracePointCnt as int)
        END,
    RefuelingThreshold=CASE o_RefuelingThreshold
           WHEN 'NULL' THEN null
           ELSE cast (o_RefuelingThreshold as smallint)
        END
           
    from FLEET_Object inner join #object on d_code=@device_code
    where
      Device_ID=@device_id
      and ObjectActive=1
    end -- esle  if not exists объект

-- теперь самое не веселое, обновление списка сенсоров
   -- сначала update сенсеров
   print ('sensor update')
   update sys_dev_sensor   
    set sensor_type_id=CASE s_sensor_type_id
           WHEN 'NULL' THEN null
           ELSE cast (s_sensor_type_id as smallint)
        END,
    IsAlarm=CASE s_IsAlarm
           WHEN 'NULL' THEN null
           ELSE cast (s_IsAlarm as tinyint)
        END,
     description=s_description,
     SaveAsEvent=CASE s_SaveAsEvent
           WHEN 'NULL' THEN null
           ELSE cast (s_SaveAsEvent as smallint)
        END,
    SensorActive=CASE s_SensorActive
           WHEN 'NULL' THEN null
           ELSE cast (s_SensorActive as smallint)
        END,
   HasOwnTank=s_HasOwnTank,
   MinValue=CASE s_MinValue
           WHEN 'NULL' THEN null
           ELSE cast (s_MinValue as float)
        END,
   MaxValue=CASE s_MaxValue
           WHEN 'NULL' THEN null
           ELSE cast (s_MaxValue as float)
        END,
   SensorClassificationId=CASE s_SensorClassificationId
           WHEN 'NULL' THEN null
           ELSE cast (s_SensorClassificationId as int)
        END,
   ObjectExtStatusID=CASE s_ObjectExtStatusID
           WHEN 'NULL' THEN null
           ELSE cast (s_ObjectExtStatusID as int)
        END,
   MapColor=CASE s_MapColor
           WHEN 'NULL' THEN null
           ELSE cast (s_MapColor as int)
        END,
   TableColor=CASE s_TableColor
           WHEN 'NULL' THEN null
           ELSE cast (s_TableColor as int)
        END,
   SignFontName=s_SignFontName,
   SignCharCode=CASE s_SignCharCode
           WHEN 'NULL' THEN null
           ELSE cast (s_SignCharCode as smallint)
        END
     
   from sys_dev_sensor inner join #sens on d_code=@device_code and s_num=num and sensor_type_id=s_sensor_type_id
   where device_id=@device_id

   -- тех сенсеров которых нет мы вставим
   print ('sensor insert')
   insert into sys_dev_sensor   
    (sensor_type_id,
    IsAlarm,
     description,
     SaveAsEvent,
    SensorActive,
   HasOwnTank,
   MinValue,
   MaxV alue,
   SensorClassifica tionId,
   ObjectExtStatusID,
   MapColor,
   TableColor,
   SignFontName,
   SignCharCode,
   num,
   device_id)
    select CASE s_sensor_type_id
           WHEN 'NULL' THEN null
           ELSE cast (s_sensor_type_id as smallint)
        END,
    CASE s_IsAlarm
           WHEN 'NULL' THEN null
           ELSE cast (s_IsAlarm as tinyint)
        END,
     s_description,
     CASE s_SaveAsEvent
           WHEN 'NULL' THEN null
           ELSE cast (s_SaveAsEvent as smallint)
        END,
    CASE s_SensorActive
           WHEN 'NULL' THEN null
           ELSE cast (s_SensorActive as smallint)
        END,
   s_HasOwnTank,
   CASE s_MinValue
           WHEN 'NULL' THEN null
           ELSE cast (s_MinValue as float)
        END,
   CASE s_MaxValue
           WHEN 'NULL' THEN null
           ELSE cast (s_MaxValue as float)
        END,
   CASE s_SensorClassificationId
           WHEN 'NULL' THEN null
           ELSE cast (s_SensorClassificationId as int)
        END,
   CASE s_ObjectExtStatusID
           WHEN 'NULL' THEN null
           ELSE cast (s_ObjectExtStatusID as int)
        END,
   CASE s_MapColor
           WHEN 'NULL' THEN null
           ELSE cast (s_MapColor as int)
        END,
   CASE s_TableColor
           WHEN 'NULL' THEN null
           ELSE cast (s_TableColor as int)
        END,
   s_SignFontName,
   CASE s_SignCharCode
           WHEN 'NULL' THEN null
           ELSE cast (s_SignCharCode as smallint)
        END,
   CASE s_num
           WHEN 'NULL' THEN null
           ELSE cast (s_num as int)
        END,
   @device_id

     
   from #sens as t
   left join sys_dev_sensor as S on s.num=t.s_num and s.sensor_type_id=t.s_sensor_type_id and s.device_id=@device_id
   where t.d_code=@device_code and s.id is null;
     

   -- теперь нужно работать с данными таррировки
   -- сначала проверим, что данных о таррировке нет по данному прибору
   print 'тарировка'
   if exists
     (    select AT.* from dbo.FLEET_AnalogTarirovka as AT
    inner join dbo.SYS_DEV_Sensor as S on S.Id=AT.IDSensor and S.SensorActive=1
    inner join SYS_DEV_Device as D on D.id=S.device_id and d.DeviceActive=1
    where D.code=@device_code
    )
    begin -- а если данные есть - их удалим
     print 'данные таррировки будут удалены для прибора '+cast(@device_code as varchar(16))   
     delete FLEET_AnalogTarirovka
     from dbo.FLEET_AnalogTarirovka as AT
     inner join dbo.SYS_DEV_Sensor as S on S.Id=AT.IDSensor and S.SensorActive=1
     inner join SYS_DEV_Device as D on D.id=S.device_id and d.DeviceActive=1
     inner join #temp as t on t.d_code=d.code and t.s_num=s.num and t.at_idsensor!='NULL'
     where D.code=@device_code;
      
    end -- if exists тарировка
   print 'AnalogTarirovka insert'
   insert into FLEET_AnalogTarirovka (MinValue_Real,
    MaxValue_Real,
    MinValue_Tar,
    MaxValue_Tar,
    IDSensor)
    select cast(replace(t.AT_MinValue_Real,',','.') as float),
    cast(replace(t.AT_MaxValue_Real,',','.') as float),
    cast(replace(t.AT_MinValue_Tar,',','.') as float),
    cast(replace(t.AT_MaxValue_Tar,',','.') as float),
    S.ID from #temp as t
    inner join dbo.SYS_DEV_Sensor as S on s.num=t.s_num and s.sensor_type_id=t.s_sensor_type_id  and S.SensorActive=1
    inner join SYS_DEV_Device as D on D.id=S.device_id and d.DeviceActive=1 and d.id=@device_id
    where t.d_code=@device_code and t.AT_idSensor!='NULL'

     FETCH NEXT FROM cur INTO @device_code
   end -- конец цикла по девайсам

drop table #temp -- удаление временной таблицы
drop table #object -- удаление временной таблицы
drop table #device
drop table #sens
--IF @@ERROR <> 0 ROLLBACK TRANSACTION
--else commit tran t1 ;-- фиксации транзакции

-- ну и под конец, что бы данные появились у клиента на экране - их тоже обновим
print 'Обновление currentdata'
insert into sys_dev_currentdata ([device_id],[device_code] ,[ObjectID])
select d.id, d.code, o.objectid from sys_dev_device as d
inner join fleet_object as o on o.device_id=d.id and o.objectactive=1
left join sys_dev_currentdata as cd on cd.device_id=d.id
where  d.deviceactive=1 and cd.id is null

где
FROM 'd:\55.csv' -- из файла, сформированного данным скриптом. Файл должен быть доступен для чтения серверу SQL!!!
 
Форум (скрипты, вопросы...) » CyberFleet » Скрипты для CyberFleet, CrossPoint » Импорт данных из csv в базу данных (Скрипт 2 из набора скриптов Импорта/экспорта данных между БД)
Страница 1 из 11
Поиск:

LogOff © 2017
Сайт создан в системе uCoz Рейтинг GPS Клуба. GPS навигаторы. GPS мониториг. GPS трекеры. ГЛОНАСС