可能重复:
SQL exclude a column using SELECT * [except columnA] FROM tableA?
是否可以选择除一列之外的所有列?
这里是所有列名:id,name,address,age
SELECT id, name, address from TBLUser
我不想使用这个select语句,因为我的表的列数彼此不同。
答案 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]