是否可以在SQL Server结果选项卡中选择最后N列?

问题描述 投票:1回答:4

不久,

我不表示最后5行。通过SELECT TOP 5 * FROM Table Order By Key DESC

但是我指的是结果标签中的最后5列。 enter image description here

为什么?因为每次添加新列并将其填充到SQL Server外部时,我都需要在不移动Horizo​​ntal Scroll的情况下查看其结果。并且许多列的开头都有相同的名称。

这不是编码问题。但它与“ SQL-Server IDE结果”选项卡本身有关。

我搜索了很多次。但是我想这件事从来没有问过。所以请我想要一种方法。我假设类似内置功能或任何人都知道的东西

sql-server ssms sql-server-2014 ssms-2014
4个回答
2
投票

就像我在评论中提到的那样,如果表的定义不断变化,则表明数据库中存在更大的设计缺陷。对象定义应该是非常静态的,并且每次连接到实例时,它们绝对不应更改。这是您问题的根本原因,而不是键入5列的名称而不是“太困难”,而不是使用*

这意味着修复您的设计,我们无法对此发表评论,但是我建议您接下来要做的[[major下一步。对您的设计进行规范化,并使用多个表(由于缺乏规范化,我怀疑您每次都会添加额外的列)。

在此期间,您可以使用动态SQL:

DECLARE @SQL nvarchar(MAX), @CRLF nchar(2) = NCHAR(13) + NCHAR(10); DECLARE @Schema sysname = N'dbo', @Table sysname = N'rCTE_Vs_Tally'; SET @SQL = N'SELECT ' + STUFF((SELECT TOP(5) N',' + @CRLF + N' ' + QUOTENAME(c.[name]) FROM sys.schemas s JOIN sys.tables t ON s.schema_id = t.schema_id JOIN sys.columns c ON t.object_id = c.object_id WHERE s.[name] = @Schema AND t.[name] = @Table ORDER BY C.column_id DESC FOR XML PATH(N''),TYPE).value('.','nvarchar(MAX)'),1,10,'') + @CRLF + N'FROM ' + QUOTENAME(@Schema) + N'.' + QUOTENAME(@Table) + @CRLF + N'ORDER BY [Key] DESC;' --Assumes all tables have the column Key PRINT @SQL; EXEC sp_executesql @SQL;


3
投票
可能基于系统目录视图的动态语句可能在这里有所帮助:

DECLARE @tablename sysname = 'table' DECLARE @schemaname sysname = 'dbo' DECLARE @stm nvarchar(max) SELECT @stm = ( SELECT TOP(5) CONCAT(@stm, N',', col.[name]) FROM sys.columns col JOIN sys.tables tab ON col.object_id = tab.object_id JOIN sys.schemas sch ON tab.schema_id = sch.schema_id WHERE tab.[name] = @tablename AND sch.[name] = @schemaname ORDER BY col.column_id DESC FOR XML PATH('') ) SELECT @stm = CONCAT( N'SELECT ', STUFF(@stm, 1, 1, N''), N' FROM ', QUOTENAME(@schemaname), N'.', QUOTENAME(@tablename) ) PRINT @stm EXEC sp_executesql @stm


1
投票
确定,确定,为此需要动态SQL。

我认为以下内容将回答您的问题:

declare @columns varchar(max) , @sql varchar(max) , @tblname varchar(20) = 'Settings' select @columns = stuff((select top 5 ',' + quotename(column_name) from information_schema.columns where table_name = quotename(@tblname) order by ordinal_position desc for xml path(''), type).value('.', 'nvarchar(max)'),1,1,'') set @sql = 'select '+@columns+' from '+quotename(@tblname) exec (@sql)

请告知是否适合您?

1
投票
只需按

“结束”键。之后,您将在列的结尾。

© www.soinside.com 2019 - 2024. All rights reserved.