选择后如何获取列的最小值无法对列执行汇总功能

问题描述

我的错误在这部分(select min(sc.name) from so.name )中,如何解决? 在选择中,我要获取表和列的名称,同时我想从表中获取列的最小值。那有可能吗?。

   select so.name table_name,sc.name Column_name,(select min(sc.name) from  so.name )
   from sysindexes si,syscolumns sc,sysobjects so
   where si.indid < 2  -- 0 = if a table. 1 = if a clustered index on an allpages-locked table. >1 = if a nonclustered index or a clustered index on a data-only-locked table.
     and so.type = 'U' --U – user table
     and sc.status & 128 = 128 --(value 128) – indicates an identity column.
     and so.id = sc.id
     and so.id = si.id

解决方法

因此,问题是您试图从根本上尝试执行动态代码,在该代码中,您尝试从系统表中基于表名选择列。 问题是SQL不知道您所引用的'so.name'是一个表(而且,sysobjects还包含过程和函数)。 与其相反,您应该基于object_id在sys.syscolumns和sys.systables之间进行内部联接。

,

(对我来说)尚不清楚您的最终目标是什么,所以现在我将仅关注动态查询问题:

# build the `select/min()` query from the system table values ...

declare  @query   varchar(1000)

select @query = 'select min('+sc.name+') from '+so.name
from   sysindexes si,syscolumns sc,sysobjects so
where  si.indid < 2             -- 0 = if a table. 1 = if a clustered index on an allpages-locked table. >1 = if a nonclustered index or a clustered index on a data-only-locked table.
and    so.type = 'U'            -- U – user table
and    sc.status & 128 = 128    -- (value 128) – indicates an identity column.
and    so.id = sc.id
and    so.id = si.id

# and then execute

execute(@query)

注意:请记住,按照编码,假设有一个带有标识列的多个表,@query将包含几个select/min()查询。对于大量查询,OP将需要a)扩展@query的大小和/或b)可能使用基于游标的方法来动态构建和运行select/min()查询。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...