SET ANSI_NULLS ON; GO SET QUOTED_IDENTIFIER ON; GO IF COL_LENGTH(N'dbo.ManuscriptStructuralChapterSources', N'StructuralParsedJson') IS NULL ALTER TABLE dbo.ManuscriptStructuralChapterSources ADD StructuralParsedJson nvarchar(max) NULL; GO IF COL_LENGTH(N'dbo.ManuscriptStructuralChapterSources', N'DefaultPovName') IS NULL ALTER TABLE dbo.ManuscriptStructuralChapterSources ADD DefaultPovName nvarchar(200) NULL; GO IF COL_LENGTH(N'dbo.ManuscriptStructuralChapterSources', N'ExplicitNarratorName') IS NULL ALTER TABLE dbo.ManuscriptStructuralChapterSources ADD ExplicitNarratorName nvarchar(200) NULL; GO CREATE OR ALTER PROCEDURE dbo.ManuscriptStructuralChapterSource_Save @ChapterID int, @ProjectID int, @BookID int, @SourceText nvarchar(max), @SourceWordCount int, @SourceCharacterCount int, @ParagraphMapJson nvarchar(max) = NULL, @StructuralParsedJson nvarchar(max) = NULL, @DefaultPovName nvarchar(200) = NULL, @ExplicitNarratorName nvarchar(200) = NULL AS BEGIN SET NOCOUNT ON; MERGE dbo.ManuscriptStructuralChapterSources AS target USING (SELECT @ChapterID AS ChapterID) AS source ON target.ChapterID = source.ChapterID WHEN MATCHED THEN UPDATE SET ProjectID = @ProjectID, BookID = @BookID, SourceText = @SourceText, SourceWordCount = @SourceWordCount, SourceCharacterCount = @SourceCharacterCount, ParagraphMapJson = @ParagraphMapJson, StructuralParsedJson = COALESCE(@StructuralParsedJson, StructuralParsedJson), DefaultPovName = COALESCE(NULLIF(LTRIM(RTRIM(@DefaultPovName)), N''), DefaultPovName), ExplicitNarratorName = COALESCE(NULLIF(LTRIM(RTRIM(@ExplicitNarratorName)), N''), ExplicitNarratorName), UpdatedUtc = SYSUTCDATETIME() WHEN NOT MATCHED THEN INSERT (ChapterID, ProjectID, BookID, SourceText, SourceWordCount, SourceCharacterCount, ParagraphMapJson, StructuralParsedJson, DefaultPovName, ExplicitNarratorName) VALUES (@ChapterID, @ProjectID, @BookID, @SourceText, @SourceWordCount, @SourceCharacterCount, @ParagraphMapJson, @StructuralParsedJson, NULLIF(LTRIM(RTRIM(@DefaultPovName)), N''), NULLIF(LTRIM(RTRIM(@ExplicitNarratorName)), N'')); END; GO