有没有办法从表/视图中选择SELECT子句中的第n列

时间:2010-05-04 20:20:17

标签: sql sql-server-2005

我有几百列的GIGANTIC视图,我需要选择第114列:

SELECT "144" FROM MyView;
PS:显然,我不知道专栏的名称。我刚刚将结果行复制到Excel文件中,搜索了EJ列中的特定值,因此我想在我的视图中选择仅显示第n列的所有行来进行进一步的调试。

干杯!

5 个答案:

答案 0 :(得分:2)

如果您使用的是MS SQL Server,则可以

sp_help ViewName

然后滚动到Column_name结果集中的第144列以查看该列的名称。

此外,您可以在SQL Server Management Studio的结果窗格中选择“使用标题复制”,并将结果集粘贴到Excel中,标题(列名称)保持不变。

答案 1 :(得分:1)

您可以在通用存储过程中使用以下内容,在该过程中传入列名,表名和n的值。这将适用于MSSQL 2000 - 2008。

CREATE PROC usp_select_Nth 
(
    @table_name sysname,
    @column_name sysname,
    @nth int
)
AS
BEGIN

SET @exec = 'SELECT MAX(' + @column_name + ') from ' + @table_name + ' WHERE ' + @column_name + ' NOT IN ( SELECT TOP ' + LTRIM(STR(@nth - 1)) + ' ' + @column_name + ' FROM ' + @table_name + ' ORDER BY ' + @column_name + ' DESC )'
EXEC (@exec)

END

答案 2 :(得分:1)

我建议根据Excel列名提供所有列名称。应该有一个excel解决方案,使第一行等于列名称(即AA,BB等)。然后进行导入,然后根据应该可计算的列名进行选择。

答案 3 :(得分:0)

不,您无法使用标准SQL或Oracle进行索引选择。

然而,其他数据库供应商可能拥有自己的专有命令。

答案 4 :(得分:0)

我遇到了同样的问题并通过此代码解决了问题。 在存储过程

中使用它
DECLARE @TableName as nVarchar(100);
DECLARE @NthColumn as Int

--we are fetching 1st column here.

SELECT 

@TableName =N'YOURTABLE',
@NthColumn=1 --Change if necessary

DECLARE @ColumnName as varchar(100);
SELECT @ColumnName = Col_name(object_id(@TableName),@NthColumn); 

EXEC ('SELECT ' + @ColumnName + ' FROM ' + @TableName);