2013-04-06 81 views
0

如何如何在sql server中選擇沒有名稱的列?

select name,family from student where name="X" 

沒有它的列名。

例如:

select "column1","column2" from student where "column1"="x" 

,或者例如

select "1","2" from student where "1"="x" 

「1」 是列1 「2」 是COLUMN2

我不想說列名。我想說只是其數量或其他.... idont累了select *。但它只是爲了我不知道列的名稱,但我知道他們在哪裏。我的列名稱每改變一次我都想讀取文件,但其數據是相同的,並且數據在每個文件的相同列中。

+0

你試過'SELECT *'? – Aiias 2013-04-06 07:53:40

+1

@Aias - 這是可怕的建議。'SELECT *'是不好的做法。 – Oded 2013-04-06 07:54:52

+3

爲什麼你想使用序號而不是列名?這意味着如果列順序/編號發生變化(哪些_can_發生),您的查詢將不會返回您認爲它的作用。 – Oded 2013-04-06 07:55:56

回答

0

不,您不能在SELECT子句中使用序號(數字)位置。只有在你可以訂購。

但是你可以使自己的列別名...

Select Column1 as [1] From Table 
0

您可以使用別名:

SELECT name AS [1], family AS [2] FROM student WHERE name="X" 
+0

但是在這種情況下,您仍然需要知道列名... – 2013-04-06 08:20:44

2

雖然你不能在SELECT語句中使用外地職位說明符,SQL標準包含INFORMATION_SCHEMA,其中定義了表的字典。這包括COLUMNS視圖,其中定義了所有表的所有字段。在這個視圖中,有一個名爲ORDINAL_POSITION的字段,可以用來幫助解決這個問題。

如果查詢

SELECT ORDINAL_POSITION, COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'TABLE' 
ORDER BY ORDINAL_POSITION 

那麼你就可以得到你想要的序號位置的列名。從那裏你可以準備一個SQL語句。

0

這是不可能的。不幸的是,他們沒有考慮表值函數,因爲information_schema不可用,所以祝你好運。

0

如果它是一個字符串,你可以這樣做:

Select Column1 + '' From Table 

如果它是一個數字,你可以這樣做:

Select Column1 + 0 From Table 

如果它是一個日期,你可以這樣做:

Select dateadd(d, 0, Column1) From Table 

和其他數據類型類似..

1

您可以使用臨時表:

DECLARE @TB TABLE(Column1 NVARCHAR(50),...) 
INSERT @TB 
SELECT * FROM student 

然後使用它:

SELECT Column1 FROM @TB WHERE Column1='aa' 
相關問題