是否有某種方法可以使SQL Server Management Studio按默認值降序返回行? 每次我通過菜單打開表格(例如通過選擇返回所有行),我會得到頂部最舊的行。 我知道我可以在SQL語句中添加「由倒序」,但打字是越來越討厭:)以desc作爲SQL Server Management Studio的默認選項排序?
回答
您無法在SSMS中的上下文菜單中更改現有的用於生成SELECT的模板。
謝天謝地,SSMS是可擴展的。這意味着您可以編寫自己的擴展程序,它可以完全按照您的要求進行,也可以使用一些現有的解決方案。我會建議姆拉登的SSMS工具包:
它是免費的,直到最近,仍然是2008R2和更早版本。
在SQL
沒有默認的排序順序如果您看到「最老」的那麼這可能是引擎檢索它的最快方式,因爲它是如何存儲在磁盤上的。
您不能保證按照此順序得到它,除非您指定訂單,否則將其視爲「無序」!
ORDER BY
是以特定順序產生結果的唯一方法。
根據指定的表格和順序,訂購可能是一個昂貴的操作,所以無序是常態。
JNK說的100%正確。
但如果你只是想讓它正常工作,只有當您打開一個表,而當你查詢的表比...
嘗試增加一個聚集索引,用第一個索引字段按降序編號。這將可能實際上導致你需要什麼。
(如果您已經在該領域的一個聚集索引,編輯它的屬性並更改其順序。)
這僅僅是一個明智的想法,如果這樣的指數是友好的實際使用桌子。這將是自拆臺有那也沒用編程,只是爲了方便您的索引;)
+1爲他可能想要的東西提供解決方法(而不是僅僅告訴他他錯了,就像我做的那樣:)) – JNK 2012-01-13 15:35:01
如果插入性能不是很糟糕,如果它們在標識列上聚合? – UnhandledExcepSean 2012-01-13 15:58:52
@SpectralGhost是的,我認爲這可能會導致邏輯碎片問題。如果邏輯上它們需要在文件中較早的位置,則分配的新擴展區可能會位於文件中稍後的頁碼處。 – 2012-01-13 16:54:40
從伊茨克奔甘的Microsoft SQL Server 2012 T-SQL Fundamentals報價 - >第1章 - >理論背景 - >集理論:
。 ..當您針對數據庫中的表(例如員工表)編寫T-SQL查詢時,您應該將整套員工視爲一個整體而不是單個員工。 ... 換句話說,對錶的查詢可以按任意順序返回錶行,除非您明確要求以特定方式對數據進行排序,可能用於演示目的。
SSMS不支持自定義的默認SELECT語句。如果它支持,應在ORDER BY子句之後放置哪一列,考慮表格
- 沒有像'CreatedDate'這樣的列;
- 或者其主鍵是GUID(爲了不明顯)
- 或不具有主鍵或聚集索引
即使SQL Server將能夠有一天列出最新的數據,它不是一種自然的方式來根據表來思考單個行(最新/最舊)。嘗試使用與ORDER BY子句結合的UPDATE語句來更新最新的數據。
縱觀探查器的輸出,它似乎在飛行中生成的查詢,所以我不會把我的希望寄託在一些模板,你可以改變的地方
/****** Script for SelectTopNRows command from SSMS ******/
SELECT TOP 1000 [field1]
,[field2]
,[field3]
,[last_modified]
FROM [test_database].[dbo].[t_test]
正如你可以創建一個替代一個小的存儲過程,它接受一個表的名稱,然後從該表中返回數據。假設您的表中有(重複發生的)邏輯表明記錄的「年齡」,找出所述表的默認順序應該不會太難。如果您然後將此存儲過程鏈接到熱鍵,則可以按照所需順序輕鬆地從該表中獲取前n個記錄。我知道這與在對象資源管理器中獲取信息並不完全一樣,但是我個人從不使用對象資源管理器,只需在查詢窗口中選擇文本並按下CTRL-3即可獲得表格的內容。
爲了讓您一開始,它會是這個樣子
IF OBJECT_ID('p_select_top_100_desc') IS NOT NULL DROP PROCEDURE p_select_top_100_desc
GO
CREATE PROCEDURE p_select_top_100_desc (@table_name sysname)
AS
DECLARE @object_id int
DECLARE @order_by_col nvarchar(max)
DECLARE @sql nvarchar(max)
SELECT @object_id = Object_id(@table_name),
@order_by_col = ''
IF @object_id IS NULL
BEGIN
RaisError('Could not find table %s ?!', 16, 1, @table_name)
Return(-1)
END
-- find order by column
SELECT TOP 1 @order_by_col = c.name
FROM sys.columns c
WHERE c.object_id = @object_id
AND lower(c.name) in ('modified', 'last_modified', 'change_date', 'crdate', 'etc')
-- if none found, use the identity column
SELECT @order_by_col = c.name + ' DESC'
FROM sys.columns c
WHERE c.object_id = @object_id
AND c.is_identity = 1
AND @order_by_col = ''
-- if still none found, use the PK (reverse order)
SELECT @order_by_col = @order_by_col
+ (CASE WHEN ic.index_column_id = 1 THEN '' ELSE ',' END)
+ c.name
+ (CASE WHEN ic.is_descending_key = 0 THEN ' DESC' ELSE ' ASC' END)
FROM sys.indexes i
JOIN sys.index_columns ic
ON ic.object_id = i.object_id
AND ic.index_id = i.index_id
JOIN sys.columns c
ON c.object_id = ic.object_id
AND c.column_id = ic.column_id
WHERE i.object_id = @object_id
AND i.is_primary_key = 1
AND @order_by_col = ''
ORDER BY ic.index_column_id
-- actual query
SELECT @sql = 'SELECT TOP 100 * FROM '
+ @table_name
+ (CASE WHEN @order_by_col = '' THEN '' ELSE ' ORDER BY ' + @order_by_col END)
PRINT @sql
EXEC (@sql)
Return 0
GO
EXEC p_select_top_100_desc 't_test'
要「鏈接」它,你需要去Tools
\ Customize
菜單上,單擊該按鈕[Keyboard...]
熱鍵。展開樹中的Keyboard
分支並轉至Query Shortcuts
葉。然後您會看到一個煩人的網格,您可以將存儲過程鏈接到CTRL-nbr
組合。請注意,它們中的一些在您配置完成後已修復+按下「確定」後,該設置將僅適用於您新打開的查詢窗口,現有窗口將與「舊」配置一起使用。
希望這有助於有點...
PS:如果你的名字sp_select_top_n_desc
並編譯它在主數據庫中,你應該能夠使用它在服務器,而不需要將它部署在每個數據庫。但是,您可能需要切換到dynamic-sql,然後使用DB_Name()
的輸出前綴所有sys.table
查詢的前綴,否則它可能會查看master.sys.columns表等。這是不是你想要的=)
嘗試建立這樣該表的看法和使用,在您的SELECT子句或即席查詢
CREATE VIEW dbo.yourTable_vw
AS
SELECT TOP 100 PERCENT *
FROM yourTable
ORDER BY yourcolumn DESC
GO
其實你可以創建SSMS,增加了一個新的插件項目添加到對象瀏覽器的上下文菜單中。
檢查這個問題:Create custom menu item in Object Explorer
另一種方法是創建生成並執行與ORDER BY在主數據庫(所有服務器上)子句的select語句的SP和綁定鍵盤快捷鍵是SP。
雖然官方沒有默認排序順序爲簡單的線性輸入我得到滿意DESC默認排序順序與PK或IX排序順序。比方說,我最感興趣的日誌表是最後一個條目。
CREATE TABLE [dbo].[tableA]([DateTime] [datetime] NOT NULL,
CONSTRAINT [PK_tableA]
PRIMARY KEY CLUSTERED ([DateTime] DESC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
或者在SSMS ...
我 - 我使用EF代碼第一,但做到這一點,每當我創建一個新表: 右鍵單擊表,腳本表爲 - >刪除&創建表,並編輯SQL並將密鑰更改爲DESC,然後運行腳本..完成(沒有視圖或任何雜亂)
- 1. 默認編碼在SQL Server Management Studio中
- 2. SQL Server Management Studio - 選項卡式文檔
- 3. SQL Server Management Studio
- 4. 結果窗口的默認大小SQL Server Management Studio或替代
- 5. SQL Server Management Studio的默認查詢結果來自「Select top 1000」
- 6. 更改SQL Server Management Studio中的默認模板
- 7. 我可以在SQL Server Management Studio中擁有多行選項卡
- 8. 2005 SQL Server Management Studio
- 9. SQL Server Management Studio ZEROFILL
- 10. sql server management studio 2008
- 11. 更改默認登錄SQL Server Management Studio(SSMS)
- 12. SQL Server Management Studio Express上的Report Server選項?
- 13. 無法在SQL Server 2012 Management Studio中使用DESC命令
- 14. 爲什麼SQL Server 2008 Management Studio沒有選項「打開表格」
- 15. SQL在SQL Server Management Studio中
- 16. 默認情況下,SQL Server表排序
- 17. 的SQL Server 2014 Management Studio中
- 18. 的SQL Server 2014 Management Studio中
- 19. SQL Server Management Studio,沒有新建項目選項
- 20. SQL Server中,如何將默認排序規則設置爲unicode?
- 21. SQL Server 2008不顯示Management Studio中的選項
- 22. SQL Server Management Studio 2012掛起
- 23. Azure表和SQL Server Management Studio
- 24. Excel 2007和SQL Server Management Studio
- 25. 什麼是sql server management studio
- 26. SQL Server Express 2008與Management Studio
- 27. SQL Server Management Studio缺失
- 28. SQL Server 2012 Management Studio - 腳本
- 29. sql server management studio 2008 installation
- 30. SQL Server Management Studio問題
我明白你在說什麼,但我只是想知道是否有一些在SQL Server管理中設置工作室。 當你右鍵點擊一張桌子時,你可以選擇檢索'top(x)',我希望設置'order desc' – 2012-10-16 12:14:13
@MartindeWildt'TOP X'只是爲了限制結果集。你當然可以添加一個'ORDER BY'。在正常情況下,如果沒有連接,返回的結果可能會以聚簇索引鍵順序。 – JNK 2012-10-16 12:15:52
我認爲這個問題的一個更好的標題可能是「是否有方法來更改SQL Server Management Studio中的默認SELECT查詢」? – 2014-04-11 01:56:18