2011-04-18 65 views
1

下午好,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子句中的值數量必須與INSERT語句中指定的列數 相匹配。

用什麼正確的語法來正確插入記錄並允許QuestionID在每次插入時自動遞增?

非常感謝您的幫助和指導。

更新的存儲過程的語法

+3

Your Values line仍然關閉每個參數周圍的缺口。它們都被認爲是由逗號隔開的一個缺口。值(@QuestionText,@QuestionStatus) – klabranche 2011-04-18 20:19:23

回答

4

刪除QuestionID和@@身份+值應爲(@ QuestionText,@ QuestionStatus)

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

SQL Server知道這QuestionID是一個標識字段,將增加它.... :-)

如果您需要返回插入的身份,然後在SP上創建一個輸出參數,並通過調用SCOPE_IDENTITY()來獲取它。

SET @QuestionID = SCOPE_IDENTITY()

1

你不指定標識列,和值不應該在自己的括號。

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

即沒有指定的標識字段。

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 [email protected] AND [email protected] 
    IF(@COUNT >0) 
     BEGIN 

      SET @RETURNVALUE = 1; 
          PRINT @RETURNVALUE  
      RETURN @RETURNVALUE 
       END 
     ELSE 
     BEGIN 
      SET @RETURNVALUE = 1; 
           PRINT @RETURNVALUE 
      RETURN @RETURNVALUE 
         END 
    END 
相關問題