如何在SQL中保存答案



我必须设计一个应用程序,让用户为一系列问题提供答案。

下面是SQL表结构

Question -列出问题的表格

评级-有评级的表

Answers-存储指定问题答案的表。

我需要的逻辑是,如何保存答案(评级id和问题id)

在超过100个问题的表中…

我是否需要生成循环或我可以在保存过程中使用逗号分隔符?

有解决方案吗?

从。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();
}

我希望我理解你的问题。我建议您将问题保存在一个具有一些唯一PK的表中,然后将答案(在自己的表中)保存为具有QuestionId(前面提到的PK)作为外键(FK)的答案。我猜你正在评级答案,所以保存评级并添加它们AnswerId (PK从答案表)和一些域特定的属性,如(用户名,评级,…)。

现在我不知道你使用什么ORM或SQL访问平台。但是循环通常是不可以的(事务等)。如果使用存储过程或类似的方法,我建议将XML结构发送到SAVE过程中。你可以有一些临时表,当你存储的答案,当你点击gui和保存你只是执行"移动"数据从临时到"真实"存储。有很多方法,但是你没有提到你的环境。

最新更新