【发布时间】:2016-05-09 05:44:30
【问题描述】:
我有一个由
定义的存储过程CREATE PROCEDURE GetQuestionsGroupedBySection
@survey_id INT
AS
SELECT S.title, Q.qtext
FROM Sections AS S INNER JOIN Questions AS Q
ON S.id = Q.section_id
WHERE S.survey_id = @survey_id
GROUP BY S.title;
相关表的定义位置
CREATE TABLE Questions (
id INT IDENTITY(1,1),
section_id INT,
qtext NVARCHAR(300) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (section_id) REFERENCES Sections(id) ON DELETE CASCADE
);
和
CREATE TABLE Sections (
id INT IDENTITY(1,1),
title NVARCHAR(200) NOT NULL,
survey_id INT,
PRIMARY KEY (id),
FOREIGN KEY (survey_id) REFERENCES Surveys(id) ON DELETE CASCADE
);
现在我正在尝试从我的服务器端代码中调用它,以获取 List 类型元素的分组
public class QuestionsBySection
{
public string SectionTitle { get; set; }
public List<string> SecionQuestions;
}
(或者是否有更好的数据结构可以使用?)。我有的是
public List<QuestionsBySection> GetQuestionsAndSection (int survid)
{
// survid: survey id
List<QuestionsBySection> AllQuestions = new List<QuestionsBySection>();
using (SqlCommand cmd = new SqlCommand("GetQuestionsGroupedBySection", this._Conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@survey_id", survid);
this._Conn.Open();
using ( SqlDataReader dataReader = cmd.ExecuteReader() )
{
while ( dataReader.Read() )
{
// ...
}
}
this._Conn.Close();
}
return AllQuestions;
}
但我不知道如何填写// ...。有什么提示吗?
【问题讨论】:
-
您的存储过程似乎不是有效的 SQL(Q.qtext 上缺少分组或聚合)
-
@JoachimIsaksson 我有
GROUP BY S.title; -
SQL Server 在我尝试创建过程时提供
Column 'Questions.qtext' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause。只有 MySQL 允许您选择一个字段而不对其进行聚合或分组。
标签: c# sql asp.net sql-server asp.net-mvc