我有这段代码:
SqlConnection Connection = new SqlConnection("data source=.;initial catalog=testdb;integrated security=sspi");
SqlCommand Command = new SqlCommand("select * from (select count(studentid) from student) as student", Connection);
Connection.Open();
Command.ExecuteNonQuery();
我希望查询来自用户,所以我需要在以我的方式编写select之后对其进行过滤:
select * from (user query) as table
但它会引发错误:
没有为'学生'的第1列指定列名。
因为有些列必须是别名,如果它是像count或avg
这样的函数我需要使用这种方式在用户编写后过滤查询。另外我知道在分组之后哪些方法不起作用,并且必须在SQL查询中有一个聚合方法......
有什么想法吗?
答案 0 :(得分:0)
这应该是一个评论,但我认为这里的格式更清晰。
逻辑上
之间没有区别SELECT *
FROM ({query}) AS STUDENT
和
{query}
那你到底想要做什么?
答案 1 :(得分:0)
您只是缺少学生数量的别名
select * from (select count(studentid) as CountOfStudents from student) as student
答案 2 :(得分:0)
您在代码和SQL语法方面都犯了一些错误。您收到的错误是由于您有一个混乱的查询询问了studednts的计数而没有给它命名,然后您选择这个单一的值并尝试给表格命名...此外,您使用的是ExecuteNonQuery,正如其名称所示,在SQL服务器上执行某些SQL并且不检索任何内容,这种命令通常用于执行语句以插入或更新数据。正确的代码如下:
SqlConnection Connection = new SqlConnection("data source=.;initial
catalog=testdb;integrated security=sspi;persist security info=true");
SqlCommand Command = new SqlCommand("select count(studentid) AS StudentsNumber from student", Connection);
Connection.Open();
object result = Command.ExecuteScalar();
MessageBox.Show(result.ToString());