SQL Server 2008 R2使用标识字段插入存储过程语法

时间:2011-04-18 20:06:03

标签: stored-procedures sql-server-2008-r2 identity-column

下午好,

我编写了一个非常基本的存储过程,用于将QuestionText和QuestionStatus插入到Question表中,其中QuestionID将主键设置为具有Identity。

语法如下:

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 个答案:

答案 0 :(得分:4)

删除QuestionID和@@ Identity +值应为(@ QuestionText,@ QuestionStatus)

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

SQL Server知道QuestionID是一个Identity字段并将其递增....: - )

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

SET @QuestionID = SCOPE_IDENTITY()

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

即。没有指定身份字段。

答案 3 :(得分: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