SQL Server 2008 R2 Синтаксис вставленной хранимой процедуры с полем идентификации - PullRequest
1 голос
/ 19 апреля 2011

Добрый день,

Я написал очень простую хранимую процедуру, которая будет использоваться для вставки QuestionText и QuestionStatus в таблицу вопросов, в которой для QuestionID int Primary Key установлено значение 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 ]

4 голосов
/ 19 апреля 2011

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

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

SQL Server знает, что QuestionID является полем Identity, и будет увеличивать его ....: -)

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

SET @QuestionID = SCOPE_IDENTITY ()

1 голос
/ 19 апреля 2011
INSERT into Questions (QuestionText,QuestionStatus)  
Values (@QuestionText,@QuestionStatus)

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

1 голос
/ 19 апреля 2011

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

INSERT into Questions
(QuestionText,QuestionStatus) 
Values
(@QuestionText, @QuestionStatus)
0 голосов
/ 21 мая 2012
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
...