我在表中有100列,我想列出除特定列之外的99列,如何排除列名稱?SQL - 從SELECT查詢中排除列
5
A
回答
5
SELECT column_1, column_2, column_3,
/* ...the list of columns 4-97, not shown in this example... */,
column_98, column_99
FROM table
有沒有更簡單的方法來做到這一點(可能通過設計):你需要明確列出你想要檢索的每一列。
儘管寫起來很麻煩,但實際上這是一件好事:在產品代碼中使用SELECT *
不鼓勵(出於性能和可維護性原因) - 請參閱this question。
6
Tutorial D關係數據庫查詢語言確實允許使用ALL BUT
根據要刪除的屬性來表示投影,但在SQL中沒有允許您這樣做的等效語法。你需要明確列出你想要的特定的。
如果您通常需要同一組列,則可以使用View。
2
你不行。從理論上講,你可能會涉及到動態SQL這裏 - 一些過程將循環遍歷你的表的所有列(例如,all_tabs_columns
Oracle中的字典視圖列出了所有表的所有列),並形成一個查詢select c1, c2 c3 ... c99 from tab
,但是我強烈阻止你這樣做。會爲您節省幾行代碼,但難以維護。 :)
1
試試這個。
DROP TABLE #MY_TEMP_TABLE
CREATE TABLE #MY_TEMP_TABLE
(
Column_1 int NULL,
Column_2 varchar(10) NULL,
Column_3 datetime NULL
)
INSERT INTO #MY_TEMP_TABLE(Column_1, Column_2, Column_3)
SELECT 1, 'a', GETDATE()
UNION SELECT 2, 'b', GETDATE()
UNION SELECT 3, 'c', GETDATE()
UNION SELECT 4, 'd', GETDATE()
DECLARE @dSQL nvarchar(1000)
SELECT @dSQL = 'SELECT TOP 10 '
SELECT @dSQL = @dSQL + LEFT(nst.ColumnList, LEN(nst.ColumnList)-1) --AS 'List'
FROM (SELECT so.id
FROM TEMPDB..SYSOBJECTS so
WHERE so.name LIKE '#MY_TEMP_TABLE%'
AND so.type = 'u') so
CROSS APPLY (SELECT sc.Name + ', '
FROM TEMPDB..SYSCOLUMNS sc
WHERE sc.id = so.id
AND sc.colid <> 3
FOR XML PATH('')) nst
(ColumnList)
SELECT @dSQL = @dSQL + ' FROM #MY_TEMP_TABLE'
EXEC sp_executesql @dSQL
您應該添加一些元文本 – keyser 2012-10-26 14:17:55