-9

我必須設計一個應用程序,讓用戶提供問題列表的答案。如何在SQL中保存答案?

下面是SQL表結構

問題 - 表,其中列出的問題

評級 - 表擁有評分

的答案,表存儲了名震問題的答案。

,我需要的是,如何保存答案(等級ID和問題ID)

在超過100個問題的表

邏輯..

我是否需要產生循環或我可以保存過程中使用逗號分隔符?

有沒有解決方法?

+0

你應該真的描述你的問題更好,你到目前爲止嘗試過/你的代碼是 –

+0

問題是如何在sql中保存100個問題的答案? 如何以簡單的方式保存而不會循環? 有沒有邏輯? –

+0

因此,您可以保存99個答案,但不是100個?那裏有什麼問題? –

回答

0

我希望我能理解你的問題。我會建議你用一些獨特的PK將問題保存在一張表中。然後將QuestionId(前面提到的PK)的答案(在它自己的表格中)保存爲外鍵(FK)。我猜你是評分答案soi保存評級並將它們添加到AnswerId(PK來自Answers Table)以及一些特定領域的屬性,如(UserName,Rating,...)。

現在我不知道您使用的ORM或SQL訪問平臺。但循環通常不會(交易等)。我建議你將XML結構發送到SAVE過程,如果你正在使用存儲過程或類似的過程。當你點擊gui存儲答案時,你可以有一些臨時表,並保存你只需將數據從臨時「移動」到「真實」存儲。有很多方法,但你沒有提到你的環境。

+0

Milos我們正在使用.Net和SQL Server .. –

1

將多個記錄從.Net保存到SQL Server表的最好方法是使用表值參數。

首先,您需要在SQL Server中創建用戶定義的表類型(UDT):

CREATE TYPE UDT_UserAnswers AS TABLE 
(
    UserAnswers_UserId int, 
    UserAnswers_QuestionId int, 
    UserAnswers_RatingId int 
) 

其次,你需要編寫程序來接受這個UDT

CREATE PROCEDURE tblAnswers_Insert 
(
    @UserAnswers AS dbo.UDT_UserAnswers READONLY -- Must be readonly! 
) 
AS 

INSERT INTO Answers(UserId, QuestionId, RatingId) 
SELECT UserAnswers_UserId, UserAnswers_QuestionId, UserAnswers_RatingId 
FROM @UserAnswers 

GO 

最後,.Net代碼(使用ado.net):

// create a data table 
DataTable dt = new DataTable(); 
dt.Columns.Add("UserAnswers_UserId", typeof(Int32)); 
dt.Columns.Add("UserAnswers_QuestionId", typeof(Int32)); 
dt.Columns.Add("UserAnswers_RatingId", typeof(Int32)); 

// Populate the data table here 


// execute the stored procedure 
using(SqlConnection con = new SqlConnection("<yourConnectionStringHere>") 
{ 
    SqlCommand cmd = new SqlCommand("tblAnswers_Insert", con); 
    cmd.Parameters.Add("@UserAnswers", SqlDbType.Structured).Value = dt; 
    cmd.ExecuteNonQuery(); 
}