Тебе не нужна транзакция.Однострочная вставка будет либо успешной, либо неудачной (и @@ROWCOUNT
в этом случае возвращает только 1).И если у вас есть уникальное ограничение на столбец заголовка (которое, очевидно, должно быть), вам не нужно сначала проверять, хотя это может быть немного более эффективно (мне придется выполнить некоторыетесты для подтверждения, но я уверен, что механизм ошибок довольно дорогой).В любом случае, вот версия с обработкой ошибок на случай, если что-то пойдет не так, как нарушение ограничения заголовка:
IF EXISTS (SELECT 1 FROM dbo.Forums WHERE Title = @Title)
BEGIN
RAISERROR('Duplicate entry', 16, 1);
RETURN 2627; -- key constraint violation
END
ELSE
BEGIN
BEGIN TRY
INSERT dbo.Forums
(
AddedBy, AddedDate, Title,
Description, ParentID,
Moderated, ImageUrl, UpdatedBy,
UpdatedDate, Active, Importance
)
SELECT
@AddedBy,
@AddedDate,
@Title,
NULL, NULL,
'False', -- did you mean 0?
NULL, NULL, NULL,
'True', -- did you mean 1?
0;
RETURN 1;
END TRY
BEGIN CATCH
DECLARE @msg NVARCHAR(4000) = 'Insert failed ' + ERROR_MESSAGE();
RAISERROR(@msg, 16, 1);
RETURN ERROR_NUMBER();
END CATCH
END