los datos no se insertan en la tabla usando transacciones

Estoy tratando de insertar algunos datos. No se inserta en la tabla usando transacciones. En cambio, va al bloque catch. A continuación se muestra el procedimiento almacenado sql: GO

/****** Object:  StoredProcedure [dbo].[rml_re_GetAndStoreConsumerSubscriptionData_NEWUPS] Script Date: 05/21/2012 12:39:59 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

--EXEC rml_re_GetAndStoreConsumerSubscriptionData_NEWUPS
ALTER PROCEDURE [dbo].[rml_re_GetAndStoreConsumerSubscriptionData_NEWUPS]  

AS
BEGIN  
 DECLARE @currenttime datetime  
 SET @currenttime= getdate()  
 INSERT INTO rml_re_consumerdatasync_log VALUES('rml_re_GetAndStoreConsumerSubscriptionData',@currenttime,null,'started',@currenttime,'',getdate(),null);  
  BEGIN TRY  
    BEGIN TRANSACTION PULLCONSUMERDATA  
        DECLARE @dbServerName VARCHAR(50),@databaseName VARCHAR(50),@dbUserName VARCHAR(50),@query VARCHAR(MAX)    
        SELECT  @dbServerName=dbservername,@databaseName=dbname,@dbUserName=dbusername FROM rml_re_applications   
        WHERE id=(SELECT configvalue FROM rml_re_configuration WHERE configname='CRMApplicationID')

        -- Removes all old data before insertion.  
        ALTER TABLE [dbo].[rml_re_consumermarkets] DROP CONSTRAINT [FK_rml_re_consumermarkets_rml_re_consumercrops]
        ALTER TABLE [dbo].[rml_re_consumermarkets] DROP CONSTRAINT [FK_rml_re_ConsumerSubscriptionMarket_rml_re_ConsumerSubscriptionData]
        ALTER TABLE [dbo].[rml_re_consumercrops] DROP CONSTRAINT [FK_rml_re_ConsumerSubscriptionCrops_rml_re_ConsumerSubscriptionData]

        TRUNCATE TABLE rml_re_consumermarkets
        TRUNCATE TABLE rml_re_consumercrops
        TRUNCATE TABLE rml_re_ConsumerSubscriptionData

    ALTER TABLE [dbo].[rml_re_consumercrops]  WITH NOCHECK ADD  CONSTRAINT [FK_rml_re_ConsumerSubscriptionCrops_rml_re_ConsumerSubscriptionData] FOREIGN KEY([subscriptionid])
    REFERENCES [dbo].[rml_re_ConsumerSubscriptionData] ([id])
    ALTER TABLE [dbo].[rml_re_consumermarkets]  WITH NOCHECK ADD  CONSTRAINT [FK_rml_re_ConsumerSubscriptionMarket_rml_re_ConsumerSubscriptionData] FOREIGN KEY([subscriptionid])
    REFERENCES [dbo].[rml_re_ConsumerSubscriptionData] ([id])
    ALTER TABLE [dbo].[rml_re_consumermarkets]  WITH CHECK ADD  CONSTRAINT [FK_rml_re_consumermarkets_rml_re_consumercrops] FOREIGN KEY([cropid])
    REFERENCES [dbo].[rml_re_consumercrops] ([cropid])


        SET @query='';
        SET @query= 'INSERT INTO rml_re_ConsumerSubscriptionData(id,msisdn,consumername,
                    languagetype,statecode,talukcode,districtcode,regioncode,status,
                    subscriptionstartdate,subscriptionenddate,DistributorCode,
                    package,soiltype,comp_category,AdditionalInfo) 
                            SELECT  id,msisdn,
                            case when Len(consumername) <=150 then consumername else null end  as consumername,
                            case when Len(languagetype) <=10 then languagetype else null end  as languagetype ,'  
        SET @query=@query+' case when Len(statecode) <=5 then statecode else null end  as statecode ,
                            case when Len(talukcode) <=10 then talukcode else null end  as talukcode  ,
                            case when Len(districtcode) <=10 then districtcode else null end  as districtcode,
                            case when Len(regioncode) <=10 then regioncode else null end  as regioncode ,
                            case when Len(status) <=50 then status else null end  as status ,
                            subscriptionstartdate ,'  
        SET @query=@query+' subscriptionenddate,
                            case when Len(DistributorCode) <=100 then DistributorCode else null end as DistributorCode ,
                            case when Len(package) <=50 then package else null end AS package ,
                            case when Len(soiltype) <=50 then soiltype else null end   as soiltype,'  
        SET @query=@query+' case when Len(comp_category) <=50 then comp_category  else null end  as comp_category  ,
                            case when Len(AdditionalInfo) <=100 then AdditionalInfo  else null end  as AdditionalInfo '  
        SET @query=@query+' FROM '  
        SET @query=@query+' ['+@dbServerName+'].'+@databaseName+'.'+@dbUserName+'.rml_re_getConsumerSubscriptionData_New '
        SET @query=@query+' WHERE crop1code is not null AND crop2code is not null '



        EXEC (@query)  
        SET @query='';
        -- INSERT FOR rml_re_consumercrops
        --INSER FOR PRIMARY CROP
        SET @query='INSERT INTO rml_re_consumercrops(subscriptionid,commoditycode,sowingdate,sowingweek)'
        SET @query=@query+'SELECT id,case when Len(crop1code) <=15 then crop1code  else null end  as crop1code ,sowingdate1,DATEDIFF (WEEK,sowingdate1,getdate()) '
        SET @query=@query+' FROM '
        SET @query=@query+' ['+@dbServerName+'].'+@databaseName+'.'+@dbUserName+'.rml_re_getConsumerSubscriptionData_New '
        SET @query=@query+' WHERE crop1code is not null AND crop2code is not null'


        EXEC (@query)  
        SET @query=''
        --INSER FOR SECONDARY CROP
        SET @query='INSERT INTO rml_re_consumercrops(subscriptionid,commoditycode,sowingdate,sowingweek)'
        SET @query=@query+'SELECT id,case when Len(crop2code) <=15 then crop2code  else null end  as crop2code  ,sowingdate2,DATEDIFF (WEEK,sowingdate2,getdate()) '
        SET @query=@query+'FROM '
        SET @query=@query+' ['+@dbServerName+'].'+@databaseName+'.'+@dbUserName+'.rml_re_getConsumerSubscriptionData_New '
        SET @query=@query+' WHERE crop1code is not null AND crop2code is not null'

        EXEC (@query)  
        SET @query=''

        --INSERT FOR rml_re_consumermarkets
        --INSER FOR PRIMARY CROP
        SET @query='INSERT INTO rml_re_consumermarkets(cropid,subscriptionid,marketcode,ric)'
        SET @query=@query+'SELECT CS.cropid,E.id,case when Len(M.item) <=15 then M.item  else null end AS marketcode ,case when Len( R.item) <=15 then  R.item  else null end  AS ric '
        SET @query=@query+'FROM rml_re_consumercrops CS,'
        SET @query=@query+' ['+@dbServerName+'].'+@databaseName+'.'+@dbUserName+'.rml_re_getConsumerSubscriptionData_New  E ' 
        SET @query=@query+' OUTER APPLY fnSplit(E.Ric1,'+''','''+') R,'
        SET @query=@query+' ['+@dbServerName+'].'+@databaseName+'.'+@dbUserName+'.rml_re_getConsumerSubscriptionData_New  F '
        SET @query=@query+' OUTER APPLY fnSplit(F.MandiCode1,'+''','''+') M '
        SET @query=@query+' WHERE F.ID = E.ID 
                AND R.ID = M.ID
                AND CS.commoditycode = E.crop1code
                AND CS.subscriptionid=E.id 
                AND CS.subscriptionid=F.id '
        SET @query=@query+' AND E.crop1code is not null AND E.crop2code is not null'
        SET @query=@query+' AND F.crop1code is not null AND F.crop2code is not null'

        EXEC (@query)  
        SET @query=''
        --INSER FOR SECONDARY CROP
        SET @query='INSERT INTO rml_re_consumermarkets(cropid,subscriptionid,marketcode,ric) '
        SET @query=@query+'SELECT CS.cropid,E.id,case when Len(M.item) <=15 then M.item  else null end AS marketcode,case when Len( R.item) <=15 then R.item  else null end AS ric  '
        SET @query=@query+'FROM rml_re_consumercrops CS,'
        SET @query=@query+' ['+@dbServerName+'].'+@databaseName+'.'+@dbUserName+'.rml_re_getConsumerSubscriptionData_New  E '
        SET @query=@query+' OUTER APPLY fnSplit(E.Ric2,'+''','''+') R,'
        SET @query=@query+' ['+@dbServerName+'].'+@databaseName+'.'+@dbUserName+'.rml_re_getConsumerSubscriptionData_New  F ' 
        SET @query=@query+' OUTER APPLY fnSplit(F.MandiCode2,'+''','''+') M '
        SET @query=@query+' WHERE F.ID = E.ID 
              AND R.ID = M.ID
              AND CS.commoditycode = E.crop2code
              AND CS.subscriptionid=E.id 
              AND CS.subscriptionid=F.id '
        SET @query=@query+' AND E.crop1code is not null AND E.crop2code is not null'
        SET @query=@query+' AND F.crop1code is not null AND F.crop2code is not null'

    EXEC (@query)       
    COMMIT TRANSACTION PULLCONSUMERDATA  
    UPDATE  rml_re_consumerdatasync_log SET status='completed',endtime=getdate() WHERE logdate=@currenttime  
  END TRY  
  BEGIN CATCH  
  --  ROLLBACK TRANSACTION PULLCONSUMERDATA  

    UPDATE  rml_re_consumerdatasync_log SET status='failure',error_info=ERROR_MESSAGE() WHERE logdate=@currenttime  
  END CATCH  

END  

--exec rml_re_GetAndStoreConsumerSubscriptionData



GO

preguntado el 22 de mayo de 12 a las 15:05

1 Respuestas

Bien, primero hay algunas cosas que puede hacer para ayudarse a sí mismo. Agregue un parámetro de depuración al proceso con un valor predeterminado de 0. Luego agregue código para imprimir el SQl dinámico en lugar de ejecutarlo si establece el valor del parámetro de depuración en 1. Esta debería ser una práctica estándar cada vez que use SQl dinámico en un proceso Es probable que una de esas declaraciones dinámicas no se esté formando correctamente, por lo que debe ver el SQL generado para averiguar qué está mal.

Está almacenando el error en el bloque catch, ¿qué mensaje de error recibe?

contestado el 22 de mayo de 12 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.