1

下午好,

我编写了一个非常基本的存储过程,用于将 QuestionText 和 QuestionStatus 插入 Questions 表中,并且 QuestionID int Primary Key 设置为具有标识。

语法如下:

CREATE PROCEDURE InsertNewQuestion 
-- Add the parameters for the stored procedure here
@QuestionText varchar(200), @QuestionStatus bit
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
INSERT into Questions
(QuestionText,QuestionStatus) 
Values
(@QuestionText),(@QuestionStatus)
END
GO

当我执行存储过程时,我收到以下错误:

INSERT 语句中的列多于 VALUES 子句中指定的值。VALUES 子句中的值数必须与 INSERT 语句中指定的列数相匹配。

正确插入记录并允许 QuestionID 在每次插入时自动递增的正确语法是什么?

非常感谢您的帮助和指导。

更新的存储过程语法

4

4 回答 4

4

删除 QuestionID 和 @@Identity + Values 应该是 (@QuestionText,@QuestionStatus)

INSERT into Questions
(QuestionText,QuestionStatus) 
Values
(@QuestionText,@QuestionStatus)

SQL Server 知道 QuestionID 是一个 Identity 字段,并将增加它.... :-)

如果您需要返回插入的标识,则在 SP 上创建一个 out 参数并通过调用 SCOPE_IDENTITY() 获取它。

SET @QuestionID = SCOPE_IDENTITY()

于 2011-04-18T20:08:26.633 回答
1

您不指定标识列,并且值不应该在它们自己的括号中。

INSERT into Questions
(QuestionText,QuestionStatus) 
Values
(@QuestionText, @QuestionStatus)
于 2011-04-18T20:09:22.137 回答
1
INSERT into Questions (QuestionText,QuestionStatus)  
Values (@QuestionText,@QuestionStatus)

即没有指定身份字段。

于 2011-04-18T20:10:14.210 回答
0
CREATE PROCEDURE SPWITHPARAMETER_AND_RETURN_VALUE
  (
    @EMPID INT,
    @IDVAL INT,   
    @RETURNVALUE INT =0 OUT
  )
  AS 
    DECLARE @COUNT INT
  BEGIN
  SELECT @COUNT=COUNT(*) FROM JOINTABLE WHERE EMPID=@EMPID AND IDVAL=@IDVAL
    IF(@COUNT >0)
      BEGIN

           SET @RETURNVALUE = 1;
                             PRINT @RETURNVALUE    
            RETURN @RETURNVALUE
              END
         ELSE
       BEGIN
            SET @RETURNVALUE = 1;
                              PRINT @RETURNVALUE
            RETURN @RETURNVALUE
                        END
  END
于 2012-05-21T04:18:56.293 回答