2013-12-19 128 views
0

我的表中有很多列,比如20-30。我想选择除了3-4列以外的所有列。有没有办法去SELECT * EVERYTHING BUT COLUMNS (Address,Name etc...) FROM MyTable如果没有,那么这样的功能会有用吗?选择除列以外的所有列

+2

http://stackoverflow.com/questions/413819/select-except –

回答

1

在SSMS中,打开对象资源管理器中,右键单击表 - > “脚本表作为” - > “选择以” - > “新查询编辑器窗口”

删除您不想要的列并运行查询。它为你打字。

+0

我知道这一点,我想这是唯一一个简单的方式做我想要的,而不需要任何改动数据库。我想我也可以选择top 1000并删除我不需要的东西。 – Steam

1

最好只在该表上创建一个VIEW,而不需要不想看到的列。然后你可以从VIEW中选择*。

2

--just变化表名,并把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; 
+0

+1有两个注释:而不是'WHERE t.name ='tagCloudLibrary''我会使用'WHERE {t | c} .object_id = OBJECT_ID(N'dbo.tagCloudLibrary')'...和来自dbo.tagCloudLibrary'。 –

+0

@Bogdan我实际上不会使用'OBJECT_ID' - [它不会观察外部隔离语义](http://connect.microsoft.com/SQL/feedback/ViewFeedback.aspx?FeedbackID=432497),并且使它在数据库中重复使用这些类型的查询更加困难。改为加入“sys.schemas”。 –

+0

@AaronBertrand感谢这个Connect项目。 OBJECT_ID并不是一件容易的事情,因为它可以用数据库名称('SELECT OBJECT(N'DB1.dbo.Table1')')调用,当前会话可能有另一个数据库活动(例如:DB2; USE DB2; SELECT OBJECT (N'DB1.dbo.Table1'))'+这些数据库可能具有不同的隔离/快照隔离设置(DB1:RCSI&DB2 /当前会话:SI)。在这些场景中应该做什么OBJECT_ID? –

相关问题