【问题标题】:Edit asterisk symbol into list of column names in SSMS by wildcard expansion通过通配符扩展将星号符号编辑到 SSMS 中的列名列表中
【发布时间】:2015-12-29 12:03:56
【问题描述】:

如何将* [星号] 更改为列名列表?将鼠标光标放在* 上后,我可以查看列名列表。是否可以在不运行脚本并将结果插入某个 dbo.temp 表的情况下单击某些内容以将 * 更改为名称?

所以想要的结果是:

with A as (select 
 MyColumn1=1 
,MyColumn2=2 
,MyColumn3=3)

select 
 MyColumn1
,MyColumn2
,MyColumn3
from A

【问题讨论】:

  • 如果您使用 SSDT 进行开发,那么“重构 -> 扩展通配符”
  • 还有 Redgate SQL 提示。 (我无法想象到 2015 年,SSMS 中没有这个基本功能。)
  • ...2021 仍然没有!

标签: sql sql-server sql-server-2008 sql-server-2017 sql-server-2019


【解决方案1】:

在 SQL Server Management Studio 中,您可以为所欲为。

在屏幕左侧,展开数据库以获取表名。然后,将表名拖到查询窗格中,它将列出所有列。

【讨论】:

    【解决方案2】:

    Sql Server 管理中有一个选项,您可以在其中使用键盘执行存储过程,您可以配置该选项以执行列出表列的过程,您可以这样做:

    点击“选项”

    如您所见,执行存储过程有许多键盘快捷键,例如,当您使用快捷键 alt+f1 突出显示表的名称时,您可以看到表的元数据,我编写了一个存储过程,显示用“,”分隔的表格列的列表,这是过程:

        Create Procedure [dbo].[NS_rs_columnas]
            @Tabla Sysname,
            @Alias Char(3)=null
        AS
        Begin
            Declare @Colums Nvarchar(Max)='';
    
            Select 
            @Colums+=','+isnull(Ltrim(Rtrim(@Alias))+'.','')+'['+b.name+']' + CHAR(13)+CHAR(10)
            from sys.tables a
            Inner join sys.all_columns b 
            on (a.object_id=b.object_id)
            Where a.name=ltrim(rtrim(@Tabla));
    
            Select ' '+Substring(@Colums,2,len(@Colums)-2);
        End
    

    所以你可以做的是配置一个快捷方式来执行该过程。

    这是我在表名上按快捷键 ctrl+f1 时的结果:

    如你所见,程序有两个参数,第二个参数是发送一个别名,这是一个例子:

    【讨论】:

    • 这是非常有用的答案。几句话。更改了两行:@Colums+=','+isnull(Ltrim(Rtrim(@Alias))+'.','')+'['+b.name+']' + CHAR(13)+CHAR(10) 和最后一行 Select ' '+Substring(@Colums,2,len(@Colums)-2); 这样我们得到的结果以逗号开头,列名括在括号中,每个列名都在一个新行中。你代码中的变量@campo 没有在任何地方使用,我把它去掉了。关闭并再次打开 SSMS 后,快捷方式有效。您必须上下车才能让它工作(MS 产品的经验法则)。
    • 这是一个很好的建议,而且我认为存储过程可以升级为选择临时表的列名列表,我会更改这些行,如果我的回答解决了您的需要,请标记它作为正确答案。
    • 我投了赞成票。 Devart、Martin Smith 和 onupdatecascade 的 cmets 可能是我的问题的更好解决方案 - 因为它们无需运行代码即可提供结果。尽管安装额外的软件有一个缺点,但这并不总是可能的。谢谢你,MelgoV。
    【解决方案3】:

    将 cte 中的 * 转换为 Management Studio 中的列名

    • 使用... select * into MyTable from A创建表
    • 您可以将 Object Explorer / Databases / MyDb / Tables / MyTable / Columns 拖到查询中
    • 如果您更喜欢带有 [] 的列名,也可以使用 Script table as Select
    • delete MyTable

    【讨论】:

      【解决方案4】:

      如果您只是想获取 表格 的完整列列表(不是 CTE),您可以这样做:

      在 SSMS 中,打开对象资源管理器并找到表。右键单击它并选择“选择前 1000 行”。

      它会给你一个这样的查询:

      SELECT TOP (1000) [ColumnName1]
          ,[ColumnName2]
          ,[Column Name 3]
          ...
      FROM [databaseName].[schemaName].[TableName]
      

      用方括号详尽地列出所有列名。

      【讨论】:

      • 不,这无济于事。请注意,我的问题是 CTE,而不是表格。从表很容易。
      • 对不起。错过了那部分:(
      【解决方案5】:

      它被称为通配符,在生产代码中使用它是不好的做法。对至少没有“TOP n”表达式的任何内容执行“SELECT *”也是不好的做法。

      例如,如果您更改了它所引用的表的架构,则必须重建包含通配符的视图才能再次正常运行。

      正如 Gordon 所说,您可以使用 UI,或者按照我自己的喜好,智能感知列名。

      UI 将强制使用方括号,以增强兼容性,尤其是对于以保留关键字命名或以数字开头的对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-01
        • 2011-11-05
        • 2011-03-26
        • 1970-01-01
        • 2012-03-27
        • 1970-01-01
        • 1970-01-01
        • 2019-06-08
        相关资源
        最近更新 更多