SQL Server - 从给定范围中选择列

时间:2011-09-12 20:00:35

标签: sql-server tsql

我有一张桌子,我有下面的栏目

[Index], [Length],[N1],[N2]....[N99]

现在,可以只选择[N2]] ... [N29]列,而无需编写所有名称。

5 个答案:

答案 0 :(得分:2)

不,这是不可能的。您需要明确列出要返回的列的子集。

答案 1 :(得分:1)

如果不写所有名字,这是不可能的。

答案 2 :(得分:1)

您当然可以从对象浏览器中拖放所有列,然后删除您不想要的列。至少你没有这种方式;没有任何错别字。

我会担心有很多列的表的设计。通常,如果他们真的是N1-N99。您可能需要重新设计相关表格。宽表也可能导致性能问题。

答案 3 :(得分:0)

使用动态sql是最接近不写列的方法。这是一个例子:

declare @sql varchar(max)

select @sql = coalesce(@sql+',', 'select ') + 'n' + cast(number as varchar(2))
from master..spt_values as N 
where type = 'P' and 
number between 2 and 29 

set @sql = @sql + ' from <yourtable>'

--select @sql
exec (@sql)

答案 4 :(得分:0)

这个怎么样:

DECLARE @columns VARCHAR(MAX), 
        @tablename VARCHAR(255), 
        @from VARCHAR(255), 
        @select VARCHAR(100)

SET @tablename = 'orderheader'

SELECT @columns = STUFF(
(
    SELECT ',[' + column_name + ']'
    FROM information_schema.columns
    WHERE table_name = @tablename
    AND NOT column_name IN ('N2', 'Index', 'Length')
    FOR XML PATH('')
),1, 1, '')

SELECT @select = 'SELECT ', @from = ' from ' + @tablename

EXEC(@select + @columns + @from)