如何在SQL中保存答案?

时间:2015-07-13 05:49:55

标签: sql sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012

我必须设计一个应用程序,用户可以在其中提供问题列表的答案。

下面是SQL表格结构

问题 - 列出问题的表

评级 - 具有评级的表

答案 - 存储着名问题答案的表格。

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

在100多个问题的表格中。

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

有什么解决方案吗?

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

我希望我理解你的问题。我建议你用一些独特的PK在一个表中保存问题。然后将具有QuestionId(之前提到的PK)的答案(在其自己的表中)保存为外键(FK)。我猜你评价Answers soi保存评级并添加它们AnswerId(来自Answers表的PK)和一些特定领域的属性,如(UserName,Rating,...)。

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