簡體   English   中英

我可以在SQL Server 2005中的選擇查詢的條件中使用列號而不是列名嗎?

[英]Can i use column number instead of column name in where condition of a select query in SQL Server 2005?

我們可以在SQL Server 2005中的選擇查詢的條件中使用列號而不是列名,這樣即使列名太長也是如此。

提前致謝。

不,你不能直接,只需將你想要的列名從對象資源管理器拖到你的查詢...你不需要輸入它

點擊F8,這將打開對象瀏覽器。 導航到DatabaseName / TableName / Columns。 單擊列文件夾並將列文件夾拖到代碼窗口中。 發布后,您將看到所有列名都在代碼窗口中。

另一個選擇是(我不推薦這個)

您需要使用動態SQL並在information_schema.columns中執行查找並查找ordinal_position以獲取列號。 如果你需要第5列,你會得到ordinal_position 5來獲取列名。 然而這很麻煩

這只是一個壞主意。 無論多長時間,都要使用列名。 老實說,這是一場維護噩夢,你會后悔這樣做。

並且確實盡量避免使用動態SQL; 這通常是一種糟糕的做法。

不,你不能,但你可以創建一個內聯視圖:

SELECT  *
FROM    (
        SELECT  Supercalifragilisticexpialidociousness AS s
        FROM    mytable
        ) q
WHERE   s = 1

SQL Server非常智能,可以將謂詞推送到視圖中,因此不會影響性能。

即使你可能會遇到麻煩。

想象一下,幾個月之后,你在SELECT子句中添加一個列並忘記/忽略匹配的WHERE子句......

不,你不能這樣做。 即使你可以,也會被認為是不好的做法。 無論列名稱有多長,列名都比數字更易讀(考慮到MS SQL中列名限制為128個字符)

這是我的查詢select * from table_name其中somecolumn = 5這里我動態得到列名,所以insted所以使用列名稱我可以使用列號

從您的評論我想你試圖通過動態獲取列名來進行查詢。 您可以通過將列名稱提取到變量並創建動態SQL查詢來完成此操作。

declare @colname varchar(128)
declare @sql varchar(max)
set @colname = 'Server'
set @sql = 'select * from Jobs where '+@colname+'='+'''S02AAPEXP01'''
exec (@sql)

打敗我為什么你想要這樣做,雖然!

不,您不能為WHERE子句執行此操作。 但是,您可以為ORDER BY子句執行此操作。 我一直使用它進行即席查詢,我不想在ORDER BY中重新輸入復雜的函數:

SELECT ServerCode, Count(*) as Databases 
FROM DatabaseList 
GROUP BY ServerCode 
ORDER BY 2 DESC

要么

SELECT EventCode, EndTime, Convert(Varchar(50),TextData) as QueryName, CPU, READS
FROM TraceData
ORDER BY 3

現在,我會把它放在生產存儲過程中嗎? 可能不是。

如果你很難記住列名,那里有一些SQL intellisense程序,我知道RedGate提供了一個。

SqL提示

SQL 2008最終附帶了Intellisense。

以下是快速選擇多個列名稱的兩個提示,這兩個列名似乎很少被SQL Server開發人員所知/使用。

1 - 在查詢分析器中突出顯示表名(雙擊它)。 然后按Alt - F1 您將看到有關該表的大量信息,其中包括列名稱。 拖動以選擇一個或多個列名稱,然后使用Ctrl - CCtrl - V將它們粘貼到查詢中。 這也是查看表中索引和約束的好方法。

2 - 在對象資源管理器中,右鍵單擊表並選擇“ 腳本表”作為/ SELECT To / Clipboard 然后將結果粘貼到查詢中並刪除不需要的部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM