【发布时间】:2013-12-19 21:39:41
【问题描述】:
我的表中有大量列,例如 20-30。我想选择除 3-4 列之外的所有列。有没有办法SELECT * EVERYTHING BUT COLUMNS (Address,Name etc...) FROM MyTable 如果没有,那么这样的功能会有用吗?
【问题讨论】:
标签: sql sql-server sql-server-2005
我的表中有大量列,例如 20-30。我想选择除 3-4 列之外的所有列。有没有办法SELECT * EVERYTHING BUT COLUMNS (Address,Name etc...) FROM MyTable 如果没有,那么这样的功能会有用吗?
【问题讨论】:
标签: sql sql-server sql-server-2005
在 SSMS 中,打开对象资源管理器,右键单击表 -> “将表编写为” -> “选择到” -> “新建查询编辑器窗口”
删除不需要的列并运行查询。它会为您完成所有的打字工作。
【讨论】:
--只需更改表名并放入 NOT IN 列
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT N',' + QUOTENAME(c.name)
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE t.name = 'tagCloudLibrary'
and c.name not in ('langID')
FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'')
set @query = N'SELECT ' + @cols + N' from tagCloudLibrary'
execute sp_executesql @query;
【讨论】:
WHERE t.name = 'tagCloudLibrary' 我会使用WHERE {t|c}.object_id = OBJECT_ID(N'dbo.tagCloudLibrary') ...和... from dbo.tagCloudLibrary。
OBJECT_ID - it doesn't observe outer isolation semantics 并且也使得跨数据库重用这些类型的查询变得更加困难。改为加入sys.schemas。
SELECT OBJECT(N'DB1.dbo.Table1')) 调用,并且当前会话可能有另一个 DB 处于活动状态(例如:DB2;USE DB2; SELECT OBJECT(N'DB1.dbo.Table1')) + 这些 DB 可能有不同的隔离/快照隔离设置(DB1: RCSI & DB2/current session:SI). 在这些场景中 OBJECT_ID 应该怎么做?
最好只在该表上创建一个 VIEW,不包含您不想看到的列。然后您可以从 VIEW 中选择 *。
【讨论】: