SqlCommand选择命令别名

时间:2016-03-06 21:14:34

标签: c# sql-server

我有这段代码:

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查询中有一个聚合方法......

有什么想法吗?

3 个答案:

答案 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());