2010-09-06 661 views

回答

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 
+0

您應該添加一些元文本 – keyser 2012-10-26 14:17:55