IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_DBImportGroupHardware]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[sp_DBImportGroupHardware] 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_DBImportGroupHardware]') AND type in (N'P', N'PC')) BEGIN EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_DBImportGroupHardware] AS' END GO ALTER PROCEDURE [dbo].[sp_DBImportGroupHardware] @TestObjectId int ,@HardwareList xml ,@errorNumber int output ,@errorMessage nvarchar(250) output AS BEGIN set @errorNumber = 0 set @errorMessage = space(0) begin try begin transaction tTestObjectHardware declare @tTestObjectHardware table( TestObjectId int ,DASId int ,DASserialNumber varchar(20) ,LocalOnly bit) insert into @tTestObjectHardware ([TestObjectId] ,[DASserialNumber] ,[LocalOnly]) select @TestObjectId ,case when charindex('_', t.x.value('(@Id)','nvarchar(20)')) =0 then t.x.value('(@Id)','nvarchar(20)') else left(t.x.value('(@Id)','nvarchar(20)'), charindex('_', t.x.value('(@Id)','nvarchar(20)'))-1) end ,t.x.value('(@LocalOnly)', 'bit') from @HardwareList.nodes('/HardwareList/Hardware') t(x) update @tTestObjectHardware set DASId = dbo.foo_IdGetDAS(DASserialNumber) insert into [dbo].[TestObjectHardware] ([TestObjectId] ,[DASId] ,[LocalOnly]) select [TestObjectId] ,[DASId] ,[LocalOnly] from @tTestObjectHardware where DASId != 0 /* TODO: Add validation */ commit transaction tTestObjectHardware end try begin catch set @errorNumber = error_number() set @errorMessage = error_message() rollback transaction tTestObjectHardware end catch; END GO