USP_CREATE_HISTORICALNAME
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@KEYNAME | nvarchar(100) | IN | |
@FIRSTNAME | nvarchar(50) | IN | |
@MIDDLENAME | nvarchar(50) | IN | |
@TITLECODEID | uniqueidentifier | IN | |
@SUFFIXCODEID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_CREATE_HISTORICALNAME
(
@ID uniqueidentifier,
@KEYNAME nvarchar(100) = '',
@FIRSTNAME nvarchar(50) = '',
@MIDDLENAME nvarchar(50) = '',
@TITLECODEID uniqueidentifier = null,
@SUFFIXCODEID uniqueidentifier = null,
@CHANGEAGENTID uniqueidentifier = null
)
as
begin
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
declare @HISTORICALNAMETYPEID uniqueidentifier = '98AFE848-8F04-4479-8430-64C860512DD4'
declare @EXISTINGKEYNAME nvarchar(100), @EXISTINGFIRSTNAME nvarchar(50), @EXISTINGMIDDLENAME nvarchar(50)
declare @EXISTINGSUFFIXCODEID uniqueidentifier, @EXISTINGTITLECODEID uniqueidentifier
select @EXISTINGKEYNAME = KEYNAME, @EXISTINGFIRSTNAME = FIRSTNAME, @EXISTINGMIDDLENAME = MIDDLENAME, @EXISTINGSUFFIXCODEID = SUFFIXCODEID, @EXISTINGTITLECODEID = TITLECODEID
from dbo.CONSTITUENT
where ID = @ID
-- If there is a conflict write out old name to alias table as historical name.
if not ((@EXISTINGFIRSTNAME = '' or @EXISTINGFIRSTNAME = @FIRSTNAME or @FIRSTNAME = '') and
(@EXISTINGKEYNAME = '' or @EXISTINGKEYNAME = @KEYNAME or @KEYNAME = '') and
(@EXISTINGMIDDLENAME = '' or @EXISTINGMIDDLENAME = @MIDDLENAME or @MIDDLENAME = '') and
(@EXISTINGSUFFIXCODEID is null or @SUFFIXCODEID is null or @EXISTINGSUFFIXCODEID = @SUFFIXCODEID ) and
(@EXISTINGTITLECODEID is null or @TITLECODEID is null or @EXISTINGTITLECODEID = @TITLECODEID))
begin
begin try
begin try
insert into dbo.ALIAS
(CONSTITUENTID, ALIASTYPECODEID, KEYNAME, FIRSTNAME, MIDDLENAME, SUFFIXCODEID, TITLECODEID, DATEADDED, DATECHANGED, ADDEDBYID, CHANGEDBYID)
values
(@ID,@HISTORICALNAMETYPEID, @EXISTINGKEYNAME, @EXISTINGFIRSTNAME, @EXISTINGMIDDLENAME, @EXISTINGSUFFIXCODEID, @EXISTINGTITLECODEID, @CURRENTDATE, @CURRENTDATE, @CHANGEAGENTID, @CHANGEAGENTID)
end try
begin catch
--assumption that it failed either
--1. ERROR_MESSAGE contains FK_ALIAS_ALIASTYPECODEID. The ID in dbo.ALIASTYPECODE is either different from the hard coded value for "Historical Name" or there isn't one.
--2. ERROR_MESSAGE contains UIX_ALIAS_CONSTITUENTID_KEYNAME_FIRSTNAME_MIDDLENAME_TITLECODEID_TITLE2CODEID_SUFFIXCODEID_SUFFIX2CODEID.
-- A duplicate name already exists in the alias table for this constituent.
if CHARINDEX('FK_ALIAS_ALIASTYPECODEID',ERROR_MESSAGE()) > 0
begin
-- get Historical Name type code. If there is not an existing one, create one
declare @ALTERNATE_HISTORICALNAMETYPECODEID uniqueidentifier = null
SELECT @ALTERNATE_HISTORICALNAMETYPECODEID = dbo.UFN_ALIASTYPECODE_GETID('Historical Name')
if @ALTERNATE_HISTORICALNAMETYPECODEID is null
begin
insert into dbo.ALIASTYPECODE (ID,DESCRIPTION,ACTIVE,SEQUENCE,ADDEDBYID,CHANGEDBYID,DATEADDED, DATECHANGED)
select @HISTORICALNAMETYPEID,'Historical Name',1,
isnull(MAX(sequence), 0)+1 ,
@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE from dbo.ALIASTYPECODE;
set @ALTERNATE_HISTORICALNAMETYPECODEID = @HISTORICALNAMETYPEID
end
-- try insert again with either new or alternate alias type code
insert into dbo.ALIAS
(CONSTITUENTID, ALIASTYPECODEID, KEYNAME, FIRSTNAME, MIDDLENAME, SUFFIXCODEID, TITLECODEID, DATEADDED, DATECHANGED, ADDEDBYID, CHANGEDBYID)
values
(@ID,@ALTERNATE_HISTORICALNAMETYPECODEID, @EXISTINGKEYNAME, @EXISTINGFIRSTNAME, @EXISTINGMIDDLENAME, @EXISTINGSUFFIXCODEID, @EXISTINGTITLECODEID, @CURRENTDATE, @CURRENTDATE, @CHANGEAGENTID, @CHANGEAGENTID)
end
else
exec dbo.USP_RAISE_ERROR;
end catch
end try
begin catch
IF NOT (CHARINDEX('UIX_ALIAS_CONSTITUENTID_KEYNAME_FIRSTNAME_MIDDLENAME_TITLECODEID_TITLE2CODEID_SUFFIXCODEID_SUFFIX2CODEID',ERROR_MESSAGE()) > 0 )
exec dbo.USP_RAISE_ERROR;
end catch
end
end