11

Possible Duplicate:
SQL exclude a column using SELECT * [except columnA] FROM tableA?

Is selecting all columns except one column possible??

here is all column names: id, name, address, age

SELECT id, name, address from TBLUser

I don't want to use this select statement because the number of columns of my tables are different to each other.

4

3 回答 3

5
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)
于 2013-01-18T04:28:48.463 回答
2

怎么样:

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]用自己的表名替换

于 2013-01-18T04:03:56.217 回答
1

在 sql*plus 中,

一种方法是禁用如下:

sql> column age noprint
sql> SELECT * from TBLUser

然后,您可以使用

sql>column age off

否则您必须使用 DBMS_SQL 包动态用户。

于 2013-01-18T04:23:42.880 回答