SQL Server 2008 R2 Вставить синтаксис хранимой процедуры с полем идентификации

#stored-procedures #sql-server-2008-r2 #identity-column

#хранимые процедуры #sql-server-2008-r2 #идентификатор-столбец

Вопрос:

Добрый день,

Я написал очень простую хранимую процедуру, которая будет использоваться для вставки questionText и QuestionStatus в таблицу вопросов с первичным ключом QuestionID int, установленным как имеющий идентификатор.

Синтаксис следующий:

 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 при каждой вставке?

Большое спасибо за вашу помощь и указания.

Обновленный синтаксис хранимой процедуры

Комментарии:

1. Ваша строка значений по-прежнему закрывает параграфы вокруг каждого параметра. Предполагается, что все они должны быть в одном параграфе, разделенном запятой. Значения (@questionText, @QuestionStatus)

Ответ №1:

Удалить QuestionID и @@Identity Значения должны быть (@questionText,@QuestionStatus)

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

SQL Server знает, что QuestionID является полем идентификации, и увеличит его …. 🙂

Если вам нужно вернуть идентификатор, который был вставлен, тогда создайте параметр out в SP и получите его, вызвав SCOPE_IDENTITY().

УСТАНОВИТЕ @QuestionID = SCOPE_IDENTITY()

Ответ №2:

Вы не указываете столбцы идентификаторов, и значения не должны заключаться в их собственные круглые скобки.

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

Ответ №3:

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

т.е. без указанного поля идентификации.

Ответ №4:

 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