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

Добрый день,

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

Большое спасибо за вашу помощь и руководство.

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


person SidC    schedule 18.04.2011    source источник
comment
Ваша строка значений по-прежнему закрывается круглыми скобками вокруг каждого параметра. Все они должны быть заключены в скобки и разделены запятыми. Значения (@QuestionText, @QuestionStatus)   -  person Kevin LaBranche    schedule 19.04.2011


Ответы (3)


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

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

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

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

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

person Kevin LaBranche    schedule 18.04.2011

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

INSERT into Questions
(QuestionText,QuestionStatus) 
Values
(@QuestionText, @QuestionStatus)
person Dustin Laine    schedule 18.04.2011

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

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

person iandayman    schedule 18.04.2011