Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите разобраться с ошибкой при выполнении SP  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Добрый день, коллеги !!!
Microsoft SQL Server 2000 - 8.00.2282 (Intel X86) Dec 30 2008 02:22:41 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Дело такое, есть ХП, вида...
+
USE [zip_work]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER  PROCEDURE [dbo].[ApsResyncAllSp]
as
SET nocount ON

if object_id('sync_xxx') is not null
   drop table sync_xxx
create table sync_xxx (
  text_data sysname
, xdate datetime
, idx int identity primary key
)

set transaction isolation level read uncommitted
alter table EFFECT000 disable trigger EFFECT000Iup
alter table JOBSTEP000 disable trigger JOBSTEP000Iup
alter table JS19VR000 disable trigger JS19VR000Iup
alter table PROCPLN000 disable trigger PROCPLN000Iup
alter table MATLPPS000 disable trigger MATLPPS000Iup
alter table PBOM000 disable trigger PBOM000Iup
alter table MATLPBOMS000 disable trigger MATLPBOMS000Iup
alter table PBOMMATLS000 disable trigger PBOMMATLS000Iup
alter table BOM000 disable trigger BOM000IUp

   declare
      @Partition uniqueidentifier
     ,@Infobar InfobarType
     ,@ContextHandling int

   --  There are OPTION KEEPFIXED PLAN statements in these routines.
   -- The are recompiled to get the best plan for a mass change.
   exec sp_recompile 'ApsSyncRouteOprSp'
   exec sp_recompile 'ApsSyncBomPrtSp'
   exec sp_recompile 'ApsSyncBomEffectivitySp'
   
   set @ContextHandling = 0
   set @Partition = newid()

   if dbo.SessionIdSp() = '00000000-0000-0000-0000-000000000000'
   begin
      exec InitSessionContextSp 'ApsResyncAllSp', @Partition output
      set @ContextHandling = 1
   end

   exec DefineVariableSp 'ApsDisableGateway000', 'Yes', @infobar output
   exec DefineVariableSp 'ApsDisableSkipSync', 'Yes', @infobar output

   ---------------------------------------

   -- Parts
   TRUNCATE TABLE MATL000
   TRUNCATE TABLE MATLRULE000
   TRUNCATE TABLE PART000
   TRUNCATE TABLE MATLATTR000

   -- Effectivities
   TRUNCATE TABLE EFFECT000

   -- BOMs
   TRUNCATE TABLE PBOM000
   TRUNCATE TABLE MATLPBOMS000
   TRUNCATE TABLE PBOMMATLS000
  
   -- Routes
   TRUNCATE TABLE PROCPLN000
   TRUNCATE TABLE MATLPPS000
   TRUNCATE TABLE JOBSTEP000
   TRUNCATE TABLE JS19VR000

   -- Orders
   TRUNCATE TABLE MATLDELV000
   TRUNCATE TABLE ORDER000
   TRUNCATE TABLE ORDATTR000
   TRUNCATE TABLE BOM000

   -- Order Categories
   TRUNCATE TABLE OPRULE000

   ---------------------------------------

   insert into TrackRows (
      SessionId, RowPointer, TrackedOperType)
   select distinct
      @Partition
      ,item.rowpointer
      ,'Sync item'
   from item

insert into sync_xxx values ( 'Before ApsSyncPartSp', getdate())
   exec ApsSyncPartSp @Partition
insert into sync_xxx values ( 'After ApsSyncPartSp', getdate())

   delete TrackRows where SessionId = @Partition

   ---------------------------------------

   insert into TrackRows (
      SessionId, RowPointer, TrackedOperType)
   select distinct
      @Partition
      ,jobroute.rowpointer
      ,'Sync jobroute'
   from jobroute
   join job on 
      job.job = jobroute.job
      and job.suffix = jobroute.suffix
      and job.stat not in ('H','C')

insert into sync_xxx values ( 'Before ApsSyncRouteEffectivitySp', getdate())
   exec ApsSyncRouteEffectivitySp @Partition
insert into sync_xxx values ( 'After ApsSyncRouteEffectivitySp', getdate())
insert into sync_xxx values ( 'Before ApsSyncBomEffectivitySp', getdate()) 
   exec ApsSyncBomEffectivitySp @Partition   
insert into sync_xxx values ( 'After ApsSyncBomEffectivitySp', getdate()) 
insert into sync_xxx values ( 'Before ApsSyncRouteOprSp', getdate())
   exec ApsSyncRouteOprSp @Partition
insert into sync_xxx values ( 'After ApsSyncRouteOprSp', getdate())

   delete TrackRows where SessionId = @Partition

   insert into TrackRows (          
      SessionId, RowPointer, TrackedOperType)
   select distinct
      @Partition
      ,jobmatl.rowpointer
      ,'Sync jobmatl'
   from jobmatl (NOLOCK)
   join job (NOLOCK) on 
      job.job = jobmatl.job
      and job.suffix = jobmatl.suffix
      and job.stat not in ('H','C')

insert into sync_xxx values ( 'Before ApsSyncBomPrtSp', getdate()) 
   exec ApsSyncBomPrtSp @Partition        
insert into sync_xxx values ( 'After ApsSyncBomPrtSp', getdate())  

   delete TrackRows where SessionId = @Partition       

   --------------------------------------------
   insert into TrackRows (
      SessionId, RowPointer, TrackedOperType)
   select distinct
      @Partition
      ,forecast.rowpointer
      ,'Sync forecast'
   from forecast (NOLOCK)

insert into sync_xxx values ( 'Before ApsSyncForecastOrderSp', getdate())
   exec ApsSyncForecastOrderSp @Partition
insert into sync_xxx values ( 'After ApsSyncForecastOrderSp', getdate())

   delete TrackRows where SessionId = @Partition

   --------------------------------------------

   insert into TrackRows (
      SessionId, RowPointer, TrackedOperType)
   select distinct
      @Partition
      ,job.rowpointer
      ,'Sync job'
   from job (NOLOCK)
   where job.stat not in ('H','C')

insert into sync_xxx values ( 'Before ApsSyncJobOrderSp', getdate())
   exec ApsSyncJobOrderSp @Partition
insert into sync_xxx values ( 'After ApsSyncJobOrderSp', getdate())
   delete TrackRows where SessionId = @Partition
   --------------------------------------------

   insert into TrackRows (
      SessionId, RowPointer, TrackedOperType)
   select distinct
      @Partition
      ,jobitem.rowpointer
      ,'Sync jobitem'
   from jobitem (NOLOCK)
   join job (NOLOCK) on 
      job.job = jobitem.job
      and job.suffix = jobitem.suffix
      and job.stat not in ('H','C')

insert into sync_xxx values ( 'Before ApsSyncJobitemOrderSp', getdate())
   exec ApsSyncJobitemOrderSp @Partition
insert into sync_xxx values ( 'After ApsSyncJobitemOrderSp', getdate())

   delete TrackRows where SessionId = @Partition
   --------------------------------------------
   
   insert into TrackRows (
      SessionId, RowPointer, TrackedOperType)
   select distinct
      @Partition
      ,coitem.rowpointer
      ,'Sync coitem'
   from coitem (NOLOCK)

insert into sync_xxx values ( 'Before ApsSyncCustomerOrderSp', getdate())
   exec ApsSyncCustomerOrderSp @Partition
insert into sync_xxx values ( 'After ApsSyncCustomerOrderSp', getdate())

   delete TrackRows where SessionId = @Partition
   --------------------------------------------

   insert into TrackRows (
      SessionId, RowPointer, TrackedOperType)
   select distinct
      @Partition
      ,trnitem.rowpointer
      ,'Sync trnitem'
   from trnitem (NOLOCK)

insert into sync_xxx values ( 'Before ApsSyncTransferOrderSp', getdate())
   exec ApsSyncTransferOrderSp @Partition
insert into sync_xxx values ( 'After ApsSyncTransferOrderSp', getdate())

   delete TrackRows where SessionId = @Partition
   --------------------------------------------

   insert into TrackRows (
      SessionId, RowPointer, TrackedOperType)
   select distinct
      @Partition
      ,rcpts.rowpointer
      ,'Sync rcpts'
   from rcpts (NOLOCK)

insert into sync_xxx values ( 'Before ApsSyncMpsOrderSp', getdate())
   exec ApsSyncMpsOrderSp @Partition
insert into sync_xxx values ( 'After ApsSyncMpsOrderSp', getdate())

   delete TrackRows where SessionId = @Partition

   -------------------------------------
   insert into TrackRows (
      SessionId, RowPointer, TrackedOperType)
   select distinct
      @Partition
      ,preqitem.rowpointer
      ,'Sync preqitem'
   from preqitem (NOLOCK)

insert into sync_xxx values ( 'Before ApsSyncPreqOrderSp', getdate())
   exec ApsSyncPreqOrderSp @Partition
insert into sync_xxx values ( 'After ApsSyncPreqOrderSp', getdate())

   delete TrackRows where SessionId = @Partition

   ---------------------------------------

   insert into TrackRows (
      SessionId, RowPointer, TrackedOperType)
   select distinct
      @Partition
      ,poitem.rowpointer
      ,'Sync poitem'
   from poitem (NOLOCK)

insert into sync_xxx values ( 'Before ApsSyncPurchaseOrderSp', getdate())
   exec ApsSyncPurchaseOrderSp @Partition
insert into sync_xxx values ( 'After ApsSyncPurchaseOrderSp', getdate())

   delete TrackRows where SessionId = @Partition

   ---------------------------------------

   insert into TrackRows (
      SessionId, RowPointer, TrackedOperType)
   select distinct
      @Partition
      ,projmatl.rowpointer
      ,'Sync projmatl'
   from projmatl (NOLOCK)

insert into sync_xxx values ( 'Before ApsSyncProjectOrderSp', getdate())
   exec ApsSyncProjectOrderSp @Partition
insert into sync_xxx values ( 'After ApsSyncProjectOrderSp', getdate())

   delete TrackRows where SessionId = @Partition

   ---------------------------------------

   insert into TrackRows (
      SessionId, RowPointer, TrackedOperType)
   select distinct
      @Partition
      ,aps_seq.rowpointer
      ,'Sync aps_seq'
   from aps_seq (NOLOCK)
  
insert into sync_xxx values ( 'Before ApsSyncApsSeqSp', getdate()  )
   exec ApsSyncApsSeqSp @Partition
insert into sync_xxx values ( 'After ApsSyncApsSeqSp', getdate()  )

   delete TrackRows where SessionId = @Partition

   IF OBJECT_ID('EXTSSSFSApsResyncAllSp') IS NOT NULL
   BEGIN
      declare @SpName sysname
      set @SpName = 'EXTSSSFSApsResyncAllSp'
      EXEC @SpName
   END


   ---------------------------------------

   exec UndefineVariableSp 'ApsDisableGateway000', @infobar output
   exec UndefineVariableSp 'ApsDisableSkipSync', @infobar output
   
   if @ContextHandling = 1
      exec CloseSessionContextSp @Partition

   --  There are OPTION KEEPFIXED PLAN statements in these routines.
   -- The are recompiled to get the best plan for a non-mass change.
   exec sp_recompile 'ApsSyncRouteOprSp'
   exec sp_recompile 'ApsSyncBomPrtSp'
   exec sp_recompile 'ApsSyncBomEffectivitySp'

alter table EFFECT000 enable trigger EFFECT000Iup
alter table JOBSTEP000 enable trigger JOBSTEP000Iup
alter table JS19VR000 enable trigger JS19VR000Iup
alter table PROCPLN000 enable trigger PROCPLN000Iup
alter table MATLPPS000 enable trigger MATLPPS000Iup
alter table PBOM000 enable trigger PBOM000Iup
alter table MATLPBOMS000 enable trigger MATLPBOMS000Iup
alter table PBOMMATLS000 enable trigger PBOMMATLS000Iup
alter table BOM000 enable trigger BOM000IUp

   return 0

Суть данной ХП в том чтобы собирать из базы данных информацию для планирования отдела логистики, собирает она её в темповые таблицы внутри самой пользовательской БД через всяко разно ХП находящиеся уже внутри выше приведённой. Далее уже начинается сама обработка внутри этих темповых таблиц, но это я думаю уже не суть важно. Вообщем с недавних пор начала выскакивать нежданно не звано ошибка при выполнении ХП выше...
Executed as user: ENERGOMERA\erpuser. Object 'ApsSyncRouteOprSp' was successfully marked for recompilation. [SQLSTATE 01000] (Message 15070) Object 'ApsSyncBomPrtSp' was successfully marked for recompilation. [SQLSTATE 01000] (Message 15070) Object 'ApsSyncBomEffectivitySp' was successfully marked for recompilation. [SQLSTATE 01000] (Message 15070) Violation of PRIMARY KEY constraint 'PK__@pbommatls__0B4C5B55'. Cannot insert duplicate key in object '#0A58371C'. [SQLSTATE 23000] (Error 2627) The statement has been terminated. [SQLSTATE 01000] (Error 3621). The step failed.

Надо как-то забороть всё это дело и безобразие. В виду администрирования серверов по выполняемым мною обязанностям в T-SQL коде разбираюсь на уровне "понимание спинным мозгом", прошу помощи :)

Значит я так понимаю наша ХП успешно выполняет вложенную ХП
exec sp_recompile 'ApsSyncBomEffectivitySp'
, а далее где-то сталкивается лбом в попытки вставить дублирующийся ПК в одну из локальных темповых таблиц. Не пойму где именно, на каком этапе, подскажите ?
11 июн 13, 09:36    [14418626]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
sp_recompile только помечает процедуру для рекомпиляции при следующем запуске, так что на неё не стоит обращать внимание.

Ошибка, скорее всего, где-то в вызываемых процедурах.
11 июн 13, 09:50    [14418701]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2414
stavgreengo,

вашу процедуру без данных мы не выполним.
вставте в разные места кода вашей процедуры
что-то вроде
...
print 1
...
print 2

и сами сможете локализовать проблемное место
11 июн 13, 09:56    [14418738]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Запустить трассу с событиями SP:Starting, SP:Completed, SP:StmtStarting, SP:StmtCompleted, Exception и с фильтром по spid -- получите место, где возникает ошибка.
11 июн 13, 10:00    [14418762]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
invm
Запустить трассу с событиями SP:Starting, SP:Completed, SP:StmtStarting, SP:StmtCompleted, Exception и с фильтром по spid -- получите место, где возникает ошибка.

Также в текте ограничьте textData like '%PBOMMATLS000%'.
Ошибка возникает при вставке в PK этой таблицы.
11 июн 13, 10:21    [14418881]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
stavgreengo,

автор
Violation of PRIMARY KEY constraint 'PK__@pbommatls__0B4C5B55'. Cannot insert duplicate key in object '#0A58371C

вот же ошибка. Не удается вставить повторяющийся элемент.
11 июн 13, 10:21    [14418882]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
У Вас там везде стоит
insert into TrackRows
. Разве нельзя посмотреть, та какой процедуре обрывается выполнение?
11 июн 13, 10:47    [14419041]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
Glory
Member

Откуда:
Сообщений: 104751
Violation of PRIMARY KEY constraint 'PK__@pbommatls__0B4C5B55'. Cannot insert duplicate key in object '#0A58371C'.

Разве много инсертов/апдейтов у табличной переменной @pbommatls ?
11 июн 13, 10:52    [14419073]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Так-с, первичное вникновение в разбор полётов показало что инсерт дублирующегося ключа идёт на таблице [zip_work].[dbo].[sync_xxx] на моменте:
insert into sync_xxx values ( 'Before ApsSyncPartSp', getdate()) 
   exec ApsSyncPartSp @Partition

Это значитсо при первом выполнении, но хранимая процедура идёт дальше и там второй такой же кусок

insert into sync_xxx values ( 'Before ApsSyncPartSp', getdate()) 
   exec ApsSyncPartSp @Partition

Вот тут и вилы потом с попыткой вставить дублирующиеся значение...вот T-SQL ХП ApsSyncPartSp ... раньше такого никогда не было, надо добраться до причины "почему стало"
+
USE [zip_work]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER    PROCEDURE [dbo].[ApsSyncPartSp] (
   @Partition RowpointerType
)
as

declare
 @ParmsSite SiteType
,@Today DateType
,@ApsParmSupplyTime int
,@DisSkip nvarchar(8)

set @Today = dbo.GetSiteDate(getdate())

select @ParmsSite = parms.site from parms
select @ApsParmSupplyTime = aps_parm.supply_time from aps_parm
set @ApsParmSupplyTime = isnull (@ApsParmSupplyTime, 0)

set @DisSkip = dbo.DefinedValue('ApsDisableSkipSync') 

IF isnull(@DisSkip, '') <> 'Yes' and dbo.RUSSkipApsSync() = 1
BEGIN
   delete TrackRows where SessionId = @Partition
   and TrackRows.TrackedOperType = 'Sync item'
   RETURN 0
END

declare @Item table (
   MaterialId nvarchar(31)
  ,Descr nvarchar(40)
  ,QuOnHand float
  ,CATEGORY int
  ,FLAGS int
  ,FLEADTIME float
  ,VLEADTIME float
  ,MINCAP float
  ,ORDMIN float
  ,ORDMULT float
  ,ORDMAX float
  ,PREC smallint
  ,SHRINK float
  ,UNITMEAS nvarchar(40)
  ,SUPPLYTOL float
  ,FEXPLTIME float
  ,VEXPLTIME float

  ,SupplySite nvarchar(8)
  ,Transit float
  ,TimeOut int
  ,PMTCode nchar(1)

  ,Family nvarchar(30)

  ,AttValue nvarchar(30)
  ,TimeFenceRule smallint
  ,TimeFenceValue float
  ,EarPlndPOReceipt datetime
  ,LowLevel tinyint          
   primary key (MaterialId)
)

insert into @Item (
   MaterialId, Descr, QuOnHand, Category, Flags, FLeadTime, VLeadTime, MinCap,
   OrdMin, OrdMult, OrdMax, Prec, Shrink, UnitMeas, SupplyTol, FExplTime, VExplTime,
   SupplySite, Transit, TimeOut, PMTCode, Family, AttValue, TimeFenceRule, 
   TimeFenceValue, EarPlndPOReceipt, LowLevel) 
select
   MaterialId =  dbo.RUSAPSMaterialId (item.item)
  ,Descr = isnull(item.description, '')
  ,QuOnHand = dbo.RUSAPSBeginQUONHAND (item)
--      dbo.MaxQty(0, isnull((select sum(itemwhse.qty_on_hand - itemwhse.qty_rsvd_co)
--         from itemwhse join whse on itemwhse.whse = whse.whse
--         where itemwhse.item = item.item and whse.dedicated_inventory <> 1), 0))
  ,CATEGORY =
     case when item.p_m_t_code = 'M'
        then 0 --manufactured-cat-code
        when item.p_m_t_code = 'P' or
               -- If supply site is not an APS site, lets treat this transfer part
               -- as a purchased part
               (item.p_m_t_code = 'T' and aps_site.rowpointer is null)
        then 1 --purchased-cat-code
        else 2 --transferred-cat-code
     end
  ,FLAGS =
      case
         when item.p_m_t_code = 'T'
         then 8192 --VAL_PRTFLAGS_TRANSFER
         else 0
      end +
      case
         when item.use_reorder_point = 0
         then 0
         else 2048 
      end +
      case
         when item.supply_tolerance_hrs = 0
         then 0
         else 256 --VAL_PRTFLAGS_SUPPLYTOL
      end +
      case
         when item.exp_lead_time = 0 and item.var_exp_lead = 0
         then 0
         else 512 --VAL_PRTFLAGS_EXPLEADTIME
      end +
      case                              
         when item.mps_flag = 0 
         then 0
         else 64   --VAL_PRTFLAGS_UNRESMFGPART  
      end +
      case
        when item.p_m_t_code = 'M'
        then 0
        else 1 --VAL_PRTFLAGS_PURCHASED
      end
      + case
        when item.mfg_supply_switching_active = 0
        then 0
        else 1024 --VAL_PRTFLAGS_MFGSUPPLYSWITCH
      end
      + case
        when item.phantom_flag <> 0
        then 16 --VAL_PRTFLAGS_SKIPPHANTOM
        else
          case
            when item.accept_req = 0
            then 8 --VAL_PRTFLAGS_SKIPBLOTHRU
            else 0
          end
        end
      + case
        when item.pass_req = 0
        then 4 --VAL_PRTFLAGS_SKIPPUR
             +2 --VAL_PRTFLAGS_SKIPMFG
        else 0
      end +
      case
         when item.p_m_t_code = 'P' or
              (item.p_m_t_code = 'T' and aps_site.rowpointer is null)
         then
            case
               when item.infinite_part <> 0
               then 32 --VAL_PRTFLAGS_UNCONSTRAIN
               else 0
            end
         else
            case
               when item.mrp_part <> 0
               then 128 --VAL_PRTFLAGS_MRPPART
               else 0
            end
      end
  ,FLEADTIME = dbo.ApsItemLeadTime(item.item)
  ,VLEADTIME = isnull(item.var_lead,0)
  ,MINCAP = dbo.ApsSafetyStockNeeded(item.item)
  ,ORDMIN = item.order_min
  ,ORDMULT = item.order_mult
  ,ORDMAX = item.order_max
  ,PREC = u_m.precision_
  ,SHRINK = item.shrink_fact * 100
  ,UNITMEAS = item.u_m
  ,SUPPLYTOL = item.supply_tolerance_hrs
  ,FEXPLTIME = isnull(item.exp_lead_time,0) * 24
  ,VEXPLTIME = isnull(item.var_exp_lead,0)

  ,SupplySite = ISNULL(aps_site.aps_site,'')
  ,Transit = ISNULL(sitenet.trn_time,0) * 24
  ,TimeOut =
     case
         when aps_site.time_out >= 1
         then aps_site.time_out
         else 1
     end
  ,PMTCode = item.p_m_t_code

  ,Family = isnull(item.setupgroup, '')

  ,AttValue = isnull(item.plan_code, '')
  ,TimeFenceRule = isnull(item.time_fence_rule,0)
  ,TimeFenceValue = isnull(item.time_fence_value,0) * 24
  ,EarPlndPOReceipt = DATEADD (second, @ApsParmSupplyTime, isnull(dbo.MidnightOf(item.earliest_planned_po_receipt), dbo.LowDate()))
  ,LowLevel = ISNULL(item.low_level,0)
from TrackRows
join item on item.RowPointer = TrackRows.RowPointer
join u_m on u_m.u_m = item.u_m
left join aps_site on
   aps_site.alt_no = 0 and
   aps_site.aps_site = item.supply_site
left join sitenet on
   sitenet.from_site = aps_site.aps_site and
   sitenet.to_site = @ParmsSite
where TrackRows.SessionId = @Partition
and TrackRows.TrackedOperType = 'Sync item'

update MATL000
set
   DESCR = item.Descr
  ,QUONHAND = item.QuOnHand
  ,CATEGORY = item.Category
  ,FLAGS = item.Flags
  ,FLEADTIME = item.FLeadTime
  ,VLEADTIME = item.VLeadTime
  ,MINCAP = item.MinCap
  ,ORDMIN = item.OrdMin
  ,ORDMULT = item.OrdMult
  ,ORDMAX = item.OrdMax
  ,PREC = item.Prec
  ,SHRINK = item.Shrink
  ,UNITMEAS = item.UnitMeas
  ,SUPPLYTOL = item.SupplyTol
  ,FEXPLTIME = item.FExplTime
  ,VEXPLTIME = item.VExplTime
  ,TFRULE = item.TimeFenceRule
  ,TFVALUE = item.TimeFenceValue
  ,EPODATE = item.EarPlndPOReceipt
  ,LOWLEVEL = item.LOWLEVEL          
from @Item item
join MATL000 on MATL000.MATERIALID = item.MaterialId

insert into MATL000
   (MATERIALID, DESCR, QUONHAND, CATEGORY, FLAGS, FLEADTIME, VLEADTIME,
    MINCAP, ORDMIN, ORDMULT, ORDMAX, PREC, SCRAP, SHRINK, UNITMEAS,
    SUPPLYTOL, FEXPLTIME, VEXPLTIME, CAPACITY, TFRULE, TFVALUE, EPODATE, LOWLEVEL)   
select
   MaterialId = item.MaterialId
  ,DESCR = item.Descr
  ,QUONHAND = item.QuOnHand
  ,CATEGORY = item.Category
  ,FLAGS = item.Flags
  ,FLEADTIME = item.FLeadTime
  ,VLEADTIME = item.VLeadTime
  ,MINCAP = item.MinCap
  ,ORDMIN = item.OrdMin
  ,ORDMULT = item.OrdMult
  ,ORDMAX = item.OrdMax
  ,PREC = item.Prec
  ,SCRAP = 0
  ,SHRINK = item.Shrink
  ,UNITMEAS = item.UnitMeas
  ,SUPPLYTOL = item.SupplyTol
  ,FEXPLTIME = item.FExplTime
  ,VEXPLTIME = item.VExplTime
  ,CAPACITY = 999999999
  ,TFRULE = item.TimeFenceRule
  ,TFVALUE = item.TimeFenceValue
  ,EPODATE = item.EarPlndPOReceipt
  ,LOWLEVEL = item.LOWLEVEL          
from @Item item
left join MATL000 on MATL000.MATERIALID = item.MaterialId
where MATL000.MATERIALID is null

update MATLRULE000
set
    RMATLID = item.MaterialId
   ,FLEADTIME = item.FLeadTime
   ,VLEADTIME = item.VLeadTime
   ,TRANSIT = item.Transit
   ,TIMEOUT = item.Timeout
from @Item item
join MATLRULE000 on
   LMATLID = item.MaterialId and
   RSITEID = item.SupplySite
where
   item.PMTCode = 'T' and
   dbo.ApsGlobalPlanningMode() = 1

insert into MATLRULE000 (
   LMATLID, RSITEID, RMATLID, FLEADTIME, VLEADTIME, TRANSIT,
   TIMEOUT, UOMSCALE)
select
   LMatlId = item.MaterialId
  ,RSiteId = item.SupplySite
  ,RMATLID = item.MaterialId
  ,FLEADTIME = item.FLeadTime
  ,VLEADTIME = item.VLeadTime
  ,TRANSIT = item.Transit
  ,TIMEOUT = item.Timeout
  ,UOMSCALE = 1
from @Item item
left join MATLRULE000 on
   LMATLID = item.MaterialId and
   RSITEID = item.SupplySite
where
   item.PMTCode = 'T'
   and MATLRULE000.LMatlId is null
   and item.SupplySite <> ''
   and dbo.ApsGlobalPlanningMode() = 1

delete from MATLRULE000
from @Item item
where
   item.MaterialId = MATLRULE000.LMATLID and
   item.PMTCode <> 'T' and
   dbo.ApsGlobalPlanningMode() = 1

update PART000
set
   FAMILY = item.Family
from @Item item
join PART000 on PART000.PARTID = item.MaterialId

insert into PART000 (
   PARTID, FAMILY)
select
   PartId = item.MaterialId
  ,Family = item.Family
from @Item item
left join PART000 on PART000.PARTID = item.MaterialId
where
   PART000.PARTID is null

update MATLATTR000
set
   ATTVALUE = item.AttValue
from @Item item
join MATLATTR000 on
   MATLATTR000.MATERIALID = item.Materialid
   and MATLATTR000.ATTID = N'PLANNERCD'

insert into MATLATTR000 (
   MATERIALID, ATTID, ATTVALUE)
select
   item.MaterialId
  ,N'PLANNERCD'
  ,item.AttValue
from @Item item
left join MATLATTR000 on
   MATLATTR000.MATERIALID = item.Materialid
   and MATLATTR000.ATTID = N'PLANNERCD'
where
   MATLATTR000.MATERIALID is null
11 июн 13, 11:04    [14419142]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavgreengo
раньше такого никогда не было, надо добраться до причины "почему стало"

Потому что раньше(изначально) никто не тестировал возможность дубликатов. А теперь они появились
11 июн 13, 11:08    [14419172]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
stavgreengo
Так-с, первичное вникновение в разбор полётов

Почему вы ищите где светло, а не там, где часы потеряли?
@pbommatls - ищите где идет insert в @pbommatls.
11 июн 13, 11:19    [14419258]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
select distinct o.id, o.name
from sysobjects as o with(nolock)
inner join syscomments as c with(nolock) on c.id = o.id
where c.text like '%@pbommatls%'
11 июн 13, 11:24    [14419310]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
разве
Guest
ambarka_max,

разве табличная переменная не померла уже в том создавшем ее батче?
11 июн 13, 11:45    [14419458]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
какогоХудожника
Guest
Ищется ссылка на текст в процедуре по имени табл переменной
11 июн 13, 11:48    [14419474]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
разве
Guest
да уже дошло, сплю еще :)
11 июн 13, 11:52    [14419512]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Как мне настроить фильтр в профайлере, чтобы я отлавливал подробно все действия при вызове и выполнении ХП ApsSyncPartSp, понимаю что надо найти её номер в object_id и скормить это фильтру. Подскажите пожалуйста как это сделать ?
11 июн 13, 12:32    [14419810]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
Glory
Member

Откуда:
Сообщений: 104751
stavgreengo
Подскажите пожалуйста как это сделать ?

object_id можно получить через функцию object_id()
А задать фильтр в профайлере можно через ввод значения на соответствующей закладке при настройке трассы
11 июн 13, 12:38    [14419853]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
_djХомяГ
Guest
Выставите в Errors и Warnings чеки и наблюдайте процесс
PS а так ObjectName фильтр
11 июн 13, 12:40    [14419874]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
stavgreengo,

Уберите constraints с этой таблицы, закомментируйте финальное удаление из этой таблицы, запустите процесс, в конце получите все записи, что туда вставлялись, и легко вычислите дубликаты.
11 июн 13, 14:37    [14420826]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с ошибкой при выполнении SP  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
ambarka_max
select distinct o.id, o.name
from sysobjects as o with(nolock)
inner join syscomments as c with(nolock) on c.id = o.id
where c.text like '%@pbommatls%'

спасибо. Проблему устранил начав копать именно в этом направлении. Вышел на таблицу с дублированными записями.
13 июн 13, 10:44    [14426711]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить