尝试让这个存储过程正常工作。
ALTER PROCEDURE [team1].[add_testimonial]
-- Add the parameters for the stored procedure here
@currentTestimonialDate char(10),@currentTestimonialContent varchar(512),@currentTestimonialOriginator varchar(20)
AS
BEGIN
DECLARE
@keyValue int
SET NOCOUNT ON;
--Get the Highest Key Value
SELECT @keyValue=max(TestimonialKey)
FROM Testimonial
--Update the Key by 1
SET @keyValue=@keyValue+1
--Store into table
INSERT INTO Testimonial VALUES (@keyValue, @currentTestimonialDate, @currentTestimonialContent, @currentTestimonialOriginator)
END
但它只是返回
Running [team1].[add_testimonial] ( @currentTestimonialDate = 11/11/10, @currentTestimonialContent = this is a test, @currentTestimonialOriginator = theman ).
No rows affected.
(0 row(s) returned)
@RETURN_VALUE = 0
Finished running [team1].[add_testimonial].
No rows affected.
(0 row(s) returned)
@RETURN_VALUE = 0
Finished running [team1].[add_testimonial].
没有任何内容添加到数据库中,可能是什么问题?
答案 0 :(得分:1)
两地可能有问题:
一个。表中没有数据,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)
收到marc_s的评论后:
将keyValue
设为INT IDENTITY
,如果多个用户同时调用它不会出现问题,DBMS将处理它,因此程序中的最终查询可能如下所示:
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
答案 1 :(得分:0)
我可以发现两个问题:
SELECT @keyValue=max(TestimonialKey)
应该是
SELECT @keyValue=ISNULL(max(TestimonialKey), 0)
考虑数据库中没有记录的情况
其次,我相信使用NOCOUNT ON
,您不会将插入行的计数返回给调用者。因此,在INSERT
语句之前添加
SET NOCOUNT OFF