【发布时间】:2011-09-13 05:11:42
【问题描述】:
我有一个表格,其中有如下列
[Index], [Length],[N1],[N2]....[N99]
现在,可以只选择[N2]] ... [N29] 列而不写入所有名称。
【问题讨论】:
标签: sql-server tsql
我有一个表格,其中有如下列
[Index], [Length],[N1],[N2]....[N99]
现在,可以只选择[N2]] ... [N29] 列而不写入所有名称。
【问题讨论】:
标签: sql-server tsql
不,这是不可能的。您需要明确列出要返回的列的子集。
【讨论】:
如果不写所有名称,这是不可能的。
【讨论】:
您当然可以从对象浏览器中拖放所有列,然后删除不需要的列。至少那样你没有任何错别字。
我会担心包含这么多列的表格的设计。特别是如果他们真的是 N1-N99。您可能需要重新设计相关表。此外,宽表可能会导致性能问题。
【讨论】:
这个怎么样:
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)
【讨论】:
使用动态 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)
【讨论】: