Thank you for getting back to me on this.
I made a slight change to the code below and added a while loop to split the comma separated list up, and pass each value to the transaction below it. Would something that simple work?
SET XACT_ABORT ON -- Ensures that transactions are rolled back automatically on errors
DECLARE @Dry_Run int = 1 -- 0 to commit, 1 to rollback
DECLARE @CopyTBFromAA varchar(50)
DECLARE @CopyTBToAA varchar(50)
SET @CopyTBFromAA='Name1 IP/OP'
--Added code to split comma separated list of AssigningAuthorities, and pass one AssigningAuthority at a time to old code.
DECLARE @comma VARCHAR(MAX) = 'NAME1,NAME2,NAME3,'
DECLARE @begin INT = 0, @count INT = 0, @max-2 INT
SELECT @max-2 = LEN(@comma) - LEN(REPLACE(@comma,',','')
WHILE @count < @max-2
BEGIN
SET @CopyTBToAA=(SELECT SUBSTRING(@comma,@begin,CHARINDEX(',',@comma,@begin+1)-@begin))--Copy thumbprint to AssigningAuthority
--SELECT (CHARINDEX(',',@comma,@begin+1)+1)
SET @begin = (CHARINDEX(',',@comma,@begin+1)+1)
SET @count = @count + 1
END
--End
Declare @CopyFromVIEGuid varchar(50)
Declare @CopyToVIEGuid varchar(50)
Select @CopyFromVIEGuid = VIEGuid From [HEALINX].[dbo].AssigningAuthority Where Name=@CopyTBFromAA
Select @CopyToVIEGuid = VIEGuid From [HEALINX].[dbo].AssigningAuthority Where Name=@CopyTBToAA
BEGIN TRANSACTION
IF (len(@CopyFromVIEGuid) > 0 AND len(@CopyToVIEGuid) > 0)
BEGIN
IF (NOT EXISTS(Select Null From [INTEROP].[dbo].XdsInboundSecurity Where AssigningAuthorityVIEGuid=@CopyToVIEGuid) )
BEGIN
INSERT INTO [INTEROP].[dbo].XdsInboundSecurity
(AssigningAuthorityVIEGuid, ClientCertificateThumbprint, ClientCertificateExpirationDate, IsActive,CreatedByVIEGuid,CreatedDate,ModifiedByVIEGuid,ModifiedDate,IsDeleted)
SELECT @CopyToVIEGuid, ClientCertificateThumbprint, ClientCertificateExpirationDate, IsActive,CreatedByVIEGuid,CreatedDate,ModifiedByVIEGuid,ModifiedDate,IsDeleted
FROM [INTEROP].[dbo].XdsInboundSecurity
WHERE AssigningAuthorityVIEGuid= @CopyFromVIEGuid
IF @@ERROR <> 0 GOTO ERROR_HANDLER
END
ELSE
BEGIN
UPDATE [INTEROP].[dbo].XdsInboundSecurity
SET ClientCertificateThumbprint = (Select ClientCertificateThumbprint From [INTEROP].[dbo].XdsInboundSecurity Where AssigningAuthorityVIEGuid=@CopyFromVIEGuid)
WHERE AssigningAuthorityVIEGuid= @CopyToVIEGuid
IF @@ERROR <> 0 GOTO ERROR_HANDLER
END
END
ELSE
BEGIN
PRINT 'Given Assigning Authority information not found in the system'
GOTO AFTER_VALUES
END
IF @Dry_Run = 1 GOTO DRY_RUN
COMMIT TRANSACTION
SELECT 'Success'
GOTO AFTER_VALUES
ERROR_HANDLER:
ROLLBACK TRANSACTION
PRINT 'An error has occured; the changes have been rolled back.'
GOTO AFTER_VALUES
DRY_RUN:
SELECT * FROM [INTEROP].[dbo].XdsInboundSecurity Where AssigningAuthorityVIEGuid=@CopyToVIEGuid
ROLLBACK TRANSACTION
SELECT 'Dry Run'
GOTO AFTER_VALUES
AFTER_VALUES:
SELECT 'AFTER TRANSACTION'
SELECT * FROM [INTEROP].[dbo].XdsInboundSecurity Where AssigningAuthorityVIEGuid=@CopyToVIEGuid
SET XACT_ABORT OFF -- Reverting back to the default