当前位置:  开发笔记 > 数据库 > 正文

是否可以使用列序号位置选择sql server数据

如何解决《是否可以使用列序号位置选择sqlserver数据》经验,为你挑选了3个好方法。

是否可以使用表列的ordinal_position选择列数据?我知道使用序数位置是一种不好的做法,但对于一次性数据导入过程,我需要能够使用序数位置来获取列数据.

所以举个例子

create table Test(
    Col1 int,
    Col2 nvarchar(10)

)

而不是使用

select Col2 from Test

我能写吗?

select "2" from Test -- for illustration purposes only

Booji Boy.. 15

你必须做类似的事情

declare @col1 as varchar(128)
declare @col2 as varchar(128)
declare @sq1 as varchar(8000) 

select @col1 = column_name from information_schema.columns where table_name = 'tablename'
and ordinal_position = @position

select @col2 = column_name from information_schema.columns where table_name = 'tablename'
and ordinal_position = @position2

set @sql = 'select ' + col1 ',' + col2 'from tablename' 

exec(@sql)


小智.. 13

如果你知道列的数量,但不知道它的名称和类型,你可以使用以下技巧:

select NULL as C1, NULL as C2 where 1 = 0 
-- Returns empty table with predefined column names
union all
select * from Test 
-- There should be exactly 2 columns, but names and data type doesn't matter

因此,您将拥有一个包含2列[C1]和[C2]的表.如果表中有100列,则此方法不是很有用,但它适用于预定义列数较少的表.



1> Booji Boy..:

你必须做类似的事情

declare @col1 as varchar(128)
declare @col2 as varchar(128)
declare @sq1 as varchar(8000) 

select @col1 = column_name from information_schema.columns where table_name = 'tablename'
and ordinal_position = @position

select @col2 = column_name from information_schema.columns where table_name = 'tablename'
and ordinal_position = @position2

set @sql = 'select ' + col1 ',' + col2 'from tablename' 

exec(@sql)



2> 小智..:

如果你知道列的数量,但不知道它的名称和类型,你可以使用以下技巧:

select NULL as C1, NULL as C2 where 1 = 0 
-- Returns empty table with predefined column names
union all
select * from Test 
-- There should be exactly 2 columns, but names and data type doesn't matter

因此,您将拥有一个包含2列[C1]和[C2]的表.如果表中有100列,则此方法不是很有用,但它适用于预定义列数较少的表.



3> Booji Boy..:

您可以使用此查询

select * from information_schema.columns

获取列的序数位置.就像迈克尔哈伦写的那样,你必须使用它来构建一个动态查询,无论是在代码中还是在传递列位置的sproc中.

FWIW,这是纯粹的邪恶.

此外,deathofrats是正确的,你不能真的这样做,因为你将建立一个基于位置的列名称的常规查询.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有