2013-07-10 67 views
1

美好的一天!我有我的存儲過程麻煩,這裏是我的代碼:複製標識並將其放到另一個表格

INSERT INTO dbo.CS_RefQuestionChoice(ChoiceDescription, QuestionID, RatingID, SetID) 

SELECT @choice, @@IDENTITY,@ratingid,1 FROM CS_RefQuestions 

的代碼運行平穩,但我有麻煩,因爲它可以節省75個記錄在我的數據庫,它應該只保存一個,所有我希望這個執行是當我保存另一個選擇時,它應該保存CS_RefQuestions的最新主鍵用於關係目的。

回答

0
INSERT INTO dbo.CS_RefQuestionChoice 
     (ChoiceDescription, 
     QuestionID, 
     RatingID, 
     SetID 
     ) 
SELECT choice, 
     QuestionChoiceID, 
     ratingid, 
     1 
    FROM CS_RefQuestions 
    WHERE QuestionChoiceID = SCOPE_IDENTITY() 

我在CS_RefQuestions表中標識列假設的QuestionChoiceID的名稱。

0
DECLARE @ident int  
SET @ident = SCOPE_IDENTITY() 

    INSERT INTO dbo.CS_RefQuestionChoice 
    (ChoiceDescription, 
      QuestionID, 
      RatingID, 
      SetID 
      ) 
    SELECT choice, 
      @ident, 
      ratingid, 
      1 
     FROM CS_RefQuestions 
0
DECLARE @ident int  
SET @ident = IDENT_CURRENT(dbo.CS_RefQuestionChoice) AS Current_Identity 
INSERT INTO dbo.CS_RefQuestionChoice(ChoiceDescription, QuestionID, RatingID, SetID) 

SELECT @choice, @ident ,@ratingid,1 FROM CS_RefQuestions 
0

感謝所有的反饋,大加讚賞。我知道我的問題很難理解,但我可以在朋友的幫助下回答我的問題。這裏是我所需要的代碼:

USE [CCBBS_Survey_DB] 
GO 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[SaveNewQuestionChoice] 
@question VARCHAR(200), 
@choice VARCHAR(100), 
@qno INT, 
@categid int, 
@ratingid int 
AS 
BEGIN 

IF NOT EXISTS(SELECT QuestionNo FROM CS_RefQuestions where QuestionNo = @qno) 
    BEGIN 
     INSERT INTO CS_RefQuestions(Question,QuestionNo,CategoryID, SetID) 
     VALUES (@question, @qno, @categid, 1) 
    END 
ELSE 
    BEGIN 
     UPDATE CS_RefQuestions 
     SET  Question = @question 
       ,CategoryID = @categid 
     WHERE QuestionNo = @qno 
    END 

DECLARE @QUI INT 

SET @QUI = (SELECT TOP(1) QuestionID FROM CS_RefQuestions where QuestionNo = @qno) 


INSERT INTO dbo.CS_RefQuestionChoice(ChoiceDescription, QuestionID, RatingID, SetID) 

SELECT @choice, @QUI, @ratingid,1 FROM CS_RefQuestions RQ 

WHERE QuestionID = @QUI 

END 
+0

這是行不通的發現在多用戶環境中:'SELECT TOP'不能保證返回剛纔插入的記錄的ID。您應該使用SCOPE_IDENTITY()。 – Curt

1

很抱歉,如果我誤解了你的問題,但它似乎是可以解決使用OUTPUT子句中INSERT聲明的問題 - 描述一個你可以在MSDN blog

+0

自從SQL Server 2005以來,我不敢相信這一點!這是一個非常方便的擴展。謝謝。 – Curt

相關問題