SET ANSI_NULLS ON; GO SET QUOTED_IDENTIFIER ON; GO INSERT dbo.CharacterAliases (CharacterID, Alias, SortOrder) SELECT c.CharacterID, LTRIM(RTRIM(c.CharacterName)), ISNULL((SELECT MAX(ca.SortOrder) FROM dbo.CharacterAliases ca WHERE ca.CharacterID = c.CharacterID), 0) + 10 FROM dbo.Characters c WHERE NULLIF(LTRIM(RTRIM(c.CharacterName)), N'') IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM dbo.CharacterAliases ca WHERE ca.CharacterID = c.CharacterID AND UPPER(LTRIM(RTRIM(ca.Alias))) = UPPER(LTRIM(RTRIM(c.CharacterName))) ); GO INSERT dbo.LocationAliases (LocationID, Alias, SortOrder) SELECT l.LocationID, LTRIM(RTRIM(l.LocationName)), ISNULL((SELECT MAX(la.SortOrder) FROM dbo.LocationAliases la WHERE la.LocationID = l.LocationID), 0) + 10 FROM dbo.Locations l WHERE NULLIF(LTRIM(RTRIM(l.LocationName)), N'') IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM dbo.LocationAliases la WHERE la.LocationID = l.LocationID AND UPPER(LTRIM(RTRIM(la.Alias))) = UPPER(LTRIM(RTRIM(l.LocationName))) ); GO CREATE OR ALTER PROCEDURE dbo.CharacterAlias_Add @CharacterID int, @Alias nvarchar(200), @SortOrder int = NULL AS BEGIN SET NOCOUNT ON; SET @Alias = LTRIM(RTRIM(@Alias)); IF NULLIF(@Alias, N'') IS NULL THROW 51000, 'Enter an alias before saving.', 1; DECLARE @ExistingCharacterAliasID int; SELECT TOP (1) @ExistingCharacterAliasID = CharacterAliasID FROM dbo.CharacterAliases WHERE CharacterID = @CharacterID AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@Alias) ORDER BY CharacterAliasID; IF @ExistingCharacterAliasID IS NOT NULL BEGIN IF @SortOrder IS NOT NULL UPDATE dbo.CharacterAliases SET SortOrder = @SortOrder WHERE CharacterAliasID = @ExistingCharacterAliasID; SELECT @ExistingCharacterAliasID AS CharacterAliasID; RETURN; END IF @SortOrder IS NULL SELECT @SortOrder = ISNULL(MAX(SortOrder), 0) + 10 FROM dbo.CharacterAliases WHERE CharacterID = @CharacterID; INSERT dbo.CharacterAliases (CharacterID, Alias, SortOrder) VALUES (@CharacterID, @Alias, @SortOrder); SELECT CAST(SCOPE_IDENTITY() AS int) AS CharacterAliasID; END; GO CREATE OR ALTER PROCEDURE dbo.CharacterAlias_Update @CharacterAliasID int, @Alias nvarchar(200), @SortOrder int = NULL AS BEGIN SET NOCOUNT ON; SET @Alias = LTRIM(RTRIM(@Alias)); IF NULLIF(@Alias, N'') IS NULL THROW 51000, 'Enter an alias before saving.', 1; DECLARE @CharacterID int; SELECT @CharacterID = CharacterID FROM dbo.CharacterAliases WHERE CharacterAliasID = @CharacterAliasID; IF EXISTS ( SELECT 1 FROM dbo.CharacterAliases WHERE CharacterID = @CharacterID AND CharacterAliasID <> @CharacterAliasID AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@Alias) ) BEGIN DELETE dbo.CharacterAliases WHERE CharacterAliasID = @CharacterAliasID; RETURN; END UPDATE dbo.CharacterAliases SET Alias = @Alias, SortOrder = COALESCE(@SortOrder, SortOrder) WHERE CharacterAliasID = @CharacterAliasID; END; GO CREATE OR ALTER PROCEDURE dbo.LocationAlias_Add @LocationID int, @Alias nvarchar(200), @SortOrder int = NULL AS BEGIN SET NOCOUNT ON; SET @Alias = LTRIM(RTRIM(@Alias)); IF NULLIF(@Alias, N'') IS NULL THROW 51000, 'Enter an alias before saving.', 1; DECLARE @ExistingLocationAliasID int; SELECT TOP (1) @ExistingLocationAliasID = LocationAliasID FROM dbo.LocationAliases WHERE LocationID = @LocationID AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@Alias) ORDER BY LocationAliasID; IF @ExistingLocationAliasID IS NOT NULL BEGIN IF @SortOrder IS NOT NULL UPDATE dbo.LocationAliases SET SortOrder = @SortOrder WHERE LocationAliasID = @ExistingLocationAliasID; SELECT @ExistingLocationAliasID AS LocationAliasID; RETURN; END IF @SortOrder IS NULL SELECT @SortOrder = ISNULL(MAX(SortOrder), 0) + 10 FROM dbo.LocationAliases WHERE LocationID = @LocationID; INSERT dbo.LocationAliases (LocationID, Alias, SortOrder) VALUES (@LocationID, @Alias, @SortOrder); SELECT CAST(SCOPE_IDENTITY() AS int) AS LocationAliasID; END; GO CREATE OR ALTER PROCEDURE dbo.LocationAlias_Update @LocationAliasID int, @Alias nvarchar(200), @SortOrder int = NULL AS BEGIN SET NOCOUNT ON; SET @Alias = LTRIM(RTRIM(@Alias)); IF NULLIF(@Alias, N'') IS NULL THROW 51000, 'Enter an alias before saving.', 1; DECLARE @LocationID int; SELECT @LocationID = LocationID FROM dbo.LocationAliases WHERE LocationAliasID = @LocationAliasID; IF EXISTS ( SELECT 1 FROM dbo.LocationAliases WHERE LocationID = @LocationID AND LocationAliasID <> @LocationAliasID AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@Alias) ) BEGIN DELETE dbo.LocationAliases WHERE LocationAliasID = @LocationAliasID; RETURN; END UPDATE dbo.LocationAliases SET Alias = @Alias, SortOrder = COALESCE(@SortOrder, SortOrder) WHERE LocationAliasID = @LocationAliasID; END; GO CREATE OR ALTER PROCEDURE dbo.Character_SetPreferredName @CharacterID int, @PreferredName nvarchar(200) AS BEGIN SET NOCOUNT ON; SET @PreferredName = LTRIM(RTRIM(@PreferredName)); IF NULLIF(@PreferredName, N'') IS NULL THROW 51000, 'Choose a known name before setting the preferred name.', 1; IF NOT EXISTS ( SELECT 1 FROM dbo.CharacterAliases WHERE CharacterID = @CharacterID AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@PreferredName) ) THROW 51000, 'The preferred name must already belong to this character.', 1; UPDATE dbo.Characters SET CharacterName = @PreferredName, UpdatedDate = SYSUTCDATETIME() WHERE CharacterID = @CharacterID; END; GO CREATE OR ALTER PROCEDURE dbo.Location_SetPreferredName @LocationID int, @PreferredName nvarchar(200) AS BEGIN SET NOCOUNT ON; SET @PreferredName = LTRIM(RTRIM(@PreferredName)); IF NULLIF(@PreferredName, N'') IS NULL THROW 51000, 'Choose a known name before setting the preferred name.', 1; IF NOT EXISTS ( SELECT 1 FROM dbo.LocationAliases WHERE LocationID = @LocationID AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@PreferredName) ) THROW 51000, 'The preferred name must already belong to this location.', 1; UPDATE dbo.Locations SET LocationName = @PreferredName, UpdatedDate = SYSUTCDATETIME() WHERE LocationID = @LocationID; END; GO CREATE OR ALTER PROCEDURE dbo.Character_Save @CharacterID int = NULL, @ProjectID int, @CharacterName nvarchar(200), @ShortName nvarchar(100) = NULL, @SexValueID int = NULL, @Sex nvarchar(100) = NULL, @BirthDate date = NULL, @AgeAtSeriesStart int = NULL, @AgeReferenceSceneID int = NULL, @Height nvarchar(50) = NULL, @EyeColour nvarchar(50) = NULL, @CharacterImportance int = NULL, @ShowInQuickAddBar bit = 0, @DefaultDescription nvarchar(max) = NULL, @ImagePath nvarchar(500) = NULL, @ThumbnailPath nvarchar(500) = NULL AS BEGIN SET NOCOUNT ON; SET @CharacterName = LTRIM(RTRIM(@CharacterName)); IF @CharacterID IS NULL OR @CharacterID = 0 BEGIN INSERT dbo.Characters (ProjectID, CharacterName, ShortName, SexValueID, Sex, BirthDate, AgeAtSeriesStart, AgeReferenceSceneID, Height, EyeColour, CharacterImportance, ShowInQuickAddBar, DefaultDescription, ImagePath, ThumbnailPath) VALUES (@ProjectID, @CharacterName, @ShortName, @SexValueID, @Sex, @BirthDate, @AgeAtSeriesStart, @AgeReferenceSceneID, @Height, @EyeColour, @CharacterImportance, @ShowInQuickAddBar, @DefaultDescription, @ImagePath, @ThumbnailPath); SET @CharacterID = CAST(SCOPE_IDENTITY() AS int); END ELSE BEGIN UPDATE dbo.Characters SET CharacterName = @CharacterName, ShortName = @ShortName, SexValueID = @SexValueID, Sex = @Sex, BirthDate = @BirthDate, AgeAtSeriesStart = @AgeAtSeriesStart, AgeReferenceSceneID = @AgeReferenceSceneID, Height = @Height, EyeColour = @EyeColour, CharacterImportance = @CharacterImportance, ShowInQuickAddBar = @ShowInQuickAddBar, DefaultDescription = @DefaultDescription, ImagePath = @ImagePath, ThumbnailPath = @ThumbnailPath, UpdatedDate = SYSUTCDATETIME() WHERE CharacterID = @CharacterID; END IF NULLIF(@CharacterName, N'') IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM dbo.CharacterAliases WHERE CharacterID = @CharacterID AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@CharacterName) ) BEGIN INSERT dbo.CharacterAliases (CharacterID, Alias, SortOrder) SELECT @CharacterID, @CharacterName, ISNULL(MAX(SortOrder), 0) + 10 FROM dbo.CharacterAliases WHERE CharacterID = @CharacterID; END SELECT @CharacterID; END; GO CREATE OR ALTER PROCEDURE dbo.Location_Save @LocationID int = NULL, @ProjectID int, @ParentLocationID int = NULL, @LocationName nvarchar(200), @LocationTypeID int = NULL, @Description nvarchar(max) = NULL, @ShowInQuickAddBar bit = 0, @ExcludeFromCompanionDetection bit = 0, @DetectionPriority int = 50 AS BEGIN SET NOCOUNT ON; SET @LocationName = LTRIM(RTRIM(@LocationName)); SET @DetectionPriority = COALESCE(@DetectionPriority, 50); IF @LocationID IS NULL OR @LocationID = 0 BEGIN INSERT dbo.Locations (ProjectID, ParentLocationID, LocationName, LocationTypeID, Description, ShowInQuickAddBar, ExcludeFromCompanionDetection, DetectionPriority) VALUES (@ProjectID, @ParentLocationID, @LocationName, @LocationTypeID, @Description, @ShowInQuickAddBar, @ExcludeFromCompanionDetection, @DetectionPriority); SET @LocationID = CAST(SCOPE_IDENTITY() AS int); END ELSE BEGIN UPDATE dbo.Locations SET ParentLocationID = @ParentLocationID, LocationName = @LocationName, LocationTypeID = @LocationTypeID, Description = @Description, ShowInQuickAddBar = @ShowInQuickAddBar, ExcludeFromCompanionDetection = @ExcludeFromCompanionDetection, DetectionPriority = @DetectionPriority, UpdatedDate = SYSUTCDATETIME() WHERE LocationID = @LocationID; END IF NULLIF(@LocationName, N'') IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM dbo.LocationAliases WHERE LocationID = @LocationID AND UPPER(LTRIM(RTRIM(Alias))) = UPPER(@LocationName) ) BEGIN INSERT dbo.LocationAliases (LocationID, Alias, SortOrder) SELECT @LocationID, @LocationName, ISNULL(MAX(SortOrder), 0) + 10 FROM dbo.LocationAliases WHERE LocationID = @LocationID; END SELECT @LocationID; END; GO