如何选择除一列之外的sql中的所有列?

时间:2013-01-18 03:55:01

标签: mysql sql sql-server

  

可能重复:
  SQL exclude a column using SELECT * [except columnA] FROM tableA?

是否可以选择除一列之外的所有列?

这里是所有列名:id,name,address,age

SELECT id, name, address from TBLUser

我不想使用这个select语句,因为我的表的列数彼此不同。

3 个答案:

答案 0 :(得分:4)

declare @cols varchar(max), @sql varchar(max)
SELECT  @cols = STUFF
    (
        ( 
            SELECT DISTINCT '], [' + name
            FROM sys.columns
            where object_id = (
                select top 1 object_id from sys.objects
                where name = 'TBLUser'
            )
            and name not in ('age')
            FOR XML PATH('')
        ), 1, 2, ''
    ) + ']'
select @sql = 'select ' + @cols + ' from TBLUser'  
exec (@sql)

答案 1 :(得分:2)

在sql * plus中,

一种方法是禁用如下:

sql> column age noprint
sql> SELECT * from TBLUser

然后,你可以使用

恢复
sql>column age off

或者你要使用DBMS_SQL包动态地使用。

答案 2 :(得分:1)

怎么样:

SELECT * FROM sys.columns 
WHERE Name <> N'Column To Exclude' and Object_ID = Object_ID(N'TBLUser')

这将返回除您要排除的列之外的所有列。

扩大解释:

根据SQL Cheat Sheet

的解释

sys.columns 是一个系统表,用于维护数据库中列的信息。对于在数据库中添加的每个列,将在sys.columns表中创建一条记录。每列只有一条记录

名称:列的名称。这在表对象中是唯一的。

Object_id :object_id是列所在的表的唯一标识符。我们将使用此列将sys.columns与sys.tables连接,以便获取不同表中的列。

我们从sys.columns中选择所有名称与您提供的名称不相同的结果,将'Column To Exclude'替换为您的列名。我们还要求object_id等于您提供的object_id。 object_id是一个数字,表示要从中过滤掉一列的表。在这个操作案例中,该表是TBLUser,在其他用途​​中,它就像这个object_id(N'[dbo].[YourTable]'),您将用您自己的表名替换[YourTable]