2013-12-19 125 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? –

相關問題