Могут быть проблемы в двух местах:
а. В таблице нет данных, поэтому max(TestimonialKey)
возвращает null
, ниже приведен соответствующий способ обработки.
--Get the Highest Key Value
SELECT @keyValue= ISNULL(MAX(TestimonialKey), 0)
FROM Testimonial
--Update the Key by 1
SET @keyValue=@keyValue+1
б. Проверьте тип данных столбца currentTestimonialDate
, является ли он типом char
или DateTime
, если это поле типа даты-времени в таблице, то перед вставкой в таблицу преобразуйте @currentTestimonialDate
в DateTime
.
Кроме того, проверьте количество столбцов, которые не могут быть пустыми, и вы передаете им данные.
Если вы не передаете данные для всех столбцов, попробуйте указать имя столбца, как показано ниже:
--Store into table
INSERT INTO Testimonial(keyValue, currentTestimonialDate,
currentTestimonialContent, currentTestimonialOriginator)
VALUES (@keyValue, @currentTestimonialDate,
@currentTestimonialContent, @currentTestimonialOriginator)
EDIT:
После получения комментария от marc_s:
Сделать keyValue
как INT IDENTITY
. Если несколько пользователей одновременно вызовут его, чтобы это не было проблемой, СУБД справится с этим, поэтому окончательный запрос в процедуре может выглядеть следующим образом:
ALTER PROCEDURE [team1].[add_testimonial]
-- Add the parameters for the stored procedure here
@currentTestimonialDate char(10),
@currentTestimonialContent varchar(512),@currentTestimonialOriginator varchar(20)
AS
BEGIN
SET NOCOUNT ON;
--Store into table
INSERT INTO Testimonial VALUES (@currentTestimonialDate,
@currentTestimonialContent, @currentTestimonialOriginator)
END