如何在sql中选择除某一列之外的所有列?
如何在sql中选择除某一列之外的所有列?
这个问题已经有了答案:
可能是重复问题:
SQL exclude a column using SELECT * [except columnA] FROM tableA?
选择除了一个列以外的所有列是否可能?
这里是所有列名:id、name、address、age
SELECT id, name, address from TBLUser
我不想使用这个select语句,因为我的表的列数不同。
admin 更改状态以发布 2023年5月20日
如何这样做:
SELECT * FROM sys.columns WHERE Name <> N'Column To Exclude' and Object_ID = Object_ID(N'TBLUser')
这将返回除您想要排除的列之外的所有列。
详细说明:
根据 SQL Cheat Sheet 中的解释:
sys.columns 是系统表,用于维护数据库中列的信息。针对数据库中每个添加的列,都会在 sys.columns 表中创建一条记录。对于每个列,只有一条记录。
Name:列的名称。在表对象内部是唯一的。
Object_id:object_id 是表中存在列的唯一标识符。我们将使用此列将 sys.columns 与 sys.tables 连接起来,以便从不同表中获取列。
我们正在选择从 sys.columns 中获取所有结果,其中名称不等于您提供的任何内容,请将 'Column To Exclude'
替换为您的列名。我们还要求 object_id 等于您提供的 object_id。object_id 是表示要从中过滤出一列的表的编号。在此 ops 示例中,表是 TBLUser,而其他用途中则会像这样 object_id(N'[dbo].[YourTable]')
,您将用自己的表名替换 [YourTable]
。
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)
的中文意思是:加粗字体的123。