是否有某种方法可以使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 2008
- 6. 2005 SQL Server Management Studio
- 7. SQL Server Management Studio ZEROFILL
- 8. 更改默认登录SQL Server Management Studio(SSMS)
- 9. SQL Server Management Studio Express上的Report Server选项?
- 10. 默认情况下,SQL Server表排序
- 11. SQL在SQL Server Management Studio中
- 12. 的SQL Server 2014 Management Studio中
- 13. 的SQL Server 2014 Management Studio中
- 14. SQL Server Management Studio,没有新建项目选项
- 15. SQL Server 2008不显示Management Studio中的选项
- 16. SQL Server Management Studio问题
- 17. SQL Server Management Studio缺失
- 18. sql server management studio 2008 installation
- 19. Excel 2007和SQL Server Management Studio
- 20. SQL Server Management Studio命令行?
- 21. 什么是sql server management studio
- 22. Microsoft SQL Server Management Studio错误
- 23. 作为SQL Server Management Studio中的作业运行存储过程
- 24. 重新打开后恢复选项卡SQL Server Management Studio
- 25. 仅在SQL Server 2005 Management Studio选项卡中显示文件名
- 26. 如何在PowerShell中获取SQL Server Management Studio选项卡消息?
- 27. 在SQL Server Management Studio 2008 R2中右侧打开新选项卡
- 28. SQL Server Management Studio的默认数据库的桌面快捷方式
- 29. 用于SQL Server 2000的SQL Sever Management Studio
- 30. 默认排序
我明白你在说什么,但我只是想知道是否有一些在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