Ok, I think I did this right. Here is my final code for the two procs:
CREATE PROC dbo.spAddNewSection
@UpdateType AS char(6),
@SectionTitle AS varchar(150),
@ShortName AS varchar(50),
@RouteName AS varchar(15),
@Synopsis AS varchar(max),
@SectionType AS varchar(15),
@PrimaryCat AS varchar(16),
@PrimaryCatPos AS tinyint,
@SecondaryCat AS varchar(16) = NULL,
@SecondaryCatPos AS tinyint = NULL,
@SectionID AS tinyint = NULL,
@UpdaterName AS varchar(50),
@FileID AS int = NULL,
@FilePath AS varchar(250) = NULL,
@FileName AS varchar(50) = NULL
AS
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION
--Proccess new section
IF (@UpdateType = 'Insert')
BEGIN
--Insert new section information
INSERT INTO dbo.tblSectionInfo (SectionTitle, ShortName, RouteName, Synopsis, SectionType)
VALUES (@SectionTitle, @ShortName, @RouteName, @Synopsis, @SectionType);
--Get the uniquie ID of the new section
SELECT @SectionID = SCOPE_IDENTITY();
--Insert primary and secondary category information
INSERT INTO dbo.tblSectionCategories (SectionID, CategoryName, MenuPosition)
SELECT @SectionID, @PrimaryCat, @PrimaryCatPos
UNION ALL
SELECT @SectionID, @SecondaryCat, @SecondaryCatPos
WHERE @SecondaryCat IS NOT NULL;
--Log the new section
INSERT INTO dbo.tblSiteUpdates (UpdatedSectionID, UpdatedInfoSectionName, UpdatedItemName, UpdateType, UpdatedBy)
VALUES (@SectionID, 'Sections', @ShortName, 'New', @UpdaterName)
END
ELSE IF (@UpdateType = 'Update') --Process a section update
BEGIN
--Update table
UPDATE dbo.tblSectionInfo
SET SectionTitle = @SectionTitle,
ShortName = @ShortName,
RouteName = @RouteName,
Synopsis = @Synopsis,
SectionType = @SectionType
WHERE SectionID = @SectionID;
--Remove category assignments
DELETE FROM dbo.tblSectionCategories
WHERE SectionID = @SectionID;
--Add back category assignments
INSERT INTO dbo.tblSectionCategories (SectionID, CategoryName, MenuPosition)
SELECT @SectionID, @PrimaryCat, @PrimaryCatPos
UNION ALL
SELECT @SectionID, @SecondaryCat, @SecondaryCatPos
WHERE @SecondaryCat IS NOT NULL;
--Log section update
INSERT INTO dbo.tblSiteUpdates (UpdatedSectionID, UpdatedInfoSectionName, UpdatedItemName, UpdateType, UpdatedBy)
VALUES (@SectionID, 'Sections', @ShortName, 'Update', @UpdaterName)
END
IF (@FilePath != NULL)
BEGIN
EXEC dbo.spFiles @UpdateType, @FileID, @FilePath, @FileName;
END
COMMIT
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR (@ErrorMessage,
@ErrorSeverity,
@ErrorState);
IF ((XACT_STATE()) = -1)
BEGIN
ROLLBACK;
END
ELSE IF ((XACT_STATE()) = 1)
BEGIN
COMMIT;
END
END CATCH
spFiles:
CREATE PROC dbo.spFiles
@UpdateType AS char(6),
@FileID AS int,
@FilePath AS varchar(250),
@Name AS varchar(50)
AS
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
--Remove existing file entries.
IF (@UpdateType = 'Update' OR @UpdateType = 'Delete')
BEGIN
DELETE FROM dbo.tblFiles
WHERE FileID = @FileID;
END
--Process a new file.
IF (@UpdateType = 'Insert' OR @UpdateType = 'Update')
BEGIN
INSERT INTO dbo.tblFiles (FilePath, Name)
VALUES (@FilePath, @Name);
--Get the FileID and return it to the calling proc.
SELECT @FileID = SCOPE_IDENTITY();
END
RETURN @FileID;
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR (@ErrorMessage,
@ErrorSeverity,
@ErrorState);
IF ((XACT_STATE()) = -1)
BEGIN
ROLLBACK;
END
ELSE IF ((XACT_STATE()) = 1)
BEGIN
COMMIT;
END
END CATCH
--
If I get used to envying others...
Those things about my self I pride will slowly fade away.
-Stellvia