IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_DBImportGroup]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[sp_DBImportGroup] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_DBImportGroup]') AND type in (N'P', N'PC')) BEGIN EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_DBImportGroup] AS' END GO ALTER PROCEDURE [dbo].[sp_DBImportGroup] @Groups xml ,@errorNumber int output ,@errorMessage nvarchar(250) output AS BEGIN set @errorNumber = 0 set @errorMessage = space(0) declare @tTestObject table ( SerialNumber nvarchar(255) ,LastModifiedBy nvarchar(50) ,LastModified datetime ,Template nvarchar(255) ,LocalOnly bit ,ParentObject nvarchar(255) ,SysBuilt bit ,OrigSerialNumber nvarchar(255) ,OrigTemplate nvarchar(255) ,Embedded bit ,HardwareList xml ,Sensors xml ,ChannelSettings xml ,Processed bit) insert into @tTestObject select t.x.value('(SerialNumber)[1]', 'nvarchar(255)') , t.x.value('(LastModifiedBy)[1]', 'nvarchar(50)') , t.x.value('(LastModified)[1]', 'datetime') , t.x.value('(TemplateName)[1]', 'nvarchar(255)') , t.x.value('(LocalOnly)[1]', 'bit') , t.x.value('(ParentObject)[1]', 'nvarchar(255)') , t.x.value('(SysBuilt)[1]', 'bit') , t.x.value('(OriginalSerialNumber)[1]', 'nvarchar(255)') , t.x.value('(OriginalTemplate)[1]', 'nvarchar(255)') , t.x.value('(Embedded)[1]', 'bit') , t.x.query('HardwareList') , t.x.query('Sensors') , t.x.query('ChannelSettings') , 0 from @Groups.nodes('/Groups/TestObject') t(x) while (Select Count(*) From @tTestObject Where Processed = 0) > 0 Begin begin try begin transaction tTestObject declare @SerialNumber nvarchar(255) ,@LastModifiedBy nvarchar(50) ,@LastModified datetime ,@Template nvarchar(255) ,@LocalOnly bit ,@ParentObject nvarchar(255) ,@SysBuilt bit ,@OrigSerialNumber nvarchar(255) ,@OrigTemplate nvarchar(255) ,@Embedded bit ,@HardwareList xml ,@Sensors xml ,@ChannelSettings xml ,@TestObjectId int select top 1 @SerialNumber = SerialNumber ,@LastModifiedBy = LastModifiedBy ,@LastModified = LastModified ,@Template = Template ,@LocalOnly = LocalOnly ,@ParentObject = ParentObject ,@SysBuilt = SysBuilt ,@OrigSerialNumber = OrigSerialNumber ,@OrigTemplate = OrigTemplate ,@Embedded = Embedded ,@HardwareList = HardwareList ,@Sensors = Sensors ,@ChannelSettings = ChannelSettings from @tTestObject where Processed = 0 exec [dbo].[sp_TestObjectsUpdateInsert] @SerialNumber ,@LastModifiedBy ,@LastModified ,@Template ,@LocalOnly ,@ParentObject ,@SysBuilt ,@OrigSerialNumber ,@OrigTemplate ,@Embedded ,@TestObjectId output ,@errorNumber output ,@errorMessage output if(@TestObjectId != 0) begin exec dbo.sp_DBImportGroupHardware @TestObjectId, @HardwareList, @errorNumber output , @errorMessage output exec dbo.sp_DBImportGroupSensors @TestObjectId, @SerialNumber, @Sensors, @errorNumber output , @errorMessage output exec dbo.sp_DBImportGroupChannelSetting @TestObjectId, @SerialNumber, @ChannelSettings, @errorNumber output , @errorMessage output end update @tTestObject set [Processed] = 1 where SerialNumber = @SerialNumber commit transaction tTestObject end try begin catch set @errorNumber = error_number() set @errorMessage = error_message() rollback transaction tTestObject end catch; end END GO