如何将
*
[星号]更改为列名列表?将鼠标光标放在 *
上后,我可以查看列名称列表。是否可以通过单击破解某些内容来将 *
更改为名称,而无需运行脚本并将结果插入到某个 dbo.temp 表中?
所以期望的结果是:
with A as (select
MyColumn1=1
,MyColumn2=2
,MyColumn3=3)
select
MyColumn1
,MyColumn2
,MyColumn3
from A
在 SQL Server Management Studio 中,您可以做您想做的事情。
在屏幕左侧,展开数据库以获取表名称。 然后,将表名称拖到查询窗格中,它将列出所有列。
Sql Server Management中有一个选项,您可以在其中使用键盘执行存储过程,您可以配置该选项来执行列出表列的过程,这是您可以执行的方法:
点击“选项”
正如您所看到的,有很多键盘快捷键可以执行存储过程,例如,当您使用快捷键 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 时的结果:
如您所见,该过程有两个参数,第二个参数是发送别名,这是一个示例:
将 cte 中的 * 转换为 Management studio 中的列名称
... select * into MyTable from A
Script table as Select
delete MyTable
如果您只是想获取表的完整列列表(不是CTE),您可以这样做:
在 SSMS 中,打开对象资源管理器并找到表。 右键单击它并选择“选择前 1000 行”。
它会给你这样的查询:
SELECT TOP (1000) [ColumnName1]
,[ColumnName2]
,[Column Name 3]
...
FROM [databaseName].[schemaName].[TableName]
详尽列出所有带有方括号的列名称。
通常您在这里提出的问题不会得到解答。我确实有一个答案。首先,这里其他人的答案都是懒惰的。我们知道我们可以拖动表中的列,但是当您在其他查询上创建查询并且您只需要先前嵌套选择中的字段时,您不需要表中的每个字段。这就是我所做的... 使用星号运行查询。选择第一条记录,右键单击并选择带标题复制。粘贴到 Excel 中,取出顶行(标题)并使用 Transpose(垂直粘贴)粘贴到 A2 中。在右侧的列中添加 =CONCATENATE(B2,", ",A2) - 如果您正确执行此操作并将该值复制下来,您将得到一个不断增长的逗号分隔字段名称文本。复制底行并粘贴到您的 SQL 中。整个事情可以在 15 秒内完成,并且可以为您提供记录集中的每个字段。
我添加此内容是因为这是搜索时出现的第一篇文章,但没有包含很好的答案(它们可以工作,但速度不是很快......)。所以我在这里记录我的发现。
SSMS 20.1 中最快的方法是突出显示您的 SELECT * FROM TABLE T 查询并按热键组合 Ctrl+Shift+Q。
这将打开查询设计器,其中已定义和选择列,您所要做的就是按“确定”以引入该表中的所有列。
此外,如果您突出显示除了 SELECT * FROM TABLE T 之外的任何“Join”语句,即 LEFT JOIN TABLETYPES TT ON TT.ID = T.TABLETYPEID ,它将合并该额外的表以及您预定义的任何别名(或者您可以在弹出的查询设计器中添加它们)。
非常方便即时执行查询并减少查询重量。希望这对某人有帮助。
它被称为通配符,在生产代码中使用它是不好的做法。在没有至少“TOP n”表达式的情况下对任何内容执行“SELECT *”也是不好的做法。
例如,如果您更改了包含通配符的视图所引用的表的架构,则必须重新构建它才能再次正常运行。
正如 Gordon 所说,您可以使用 UI,或者按照我自己的喜好,智能感知列名称。
UI 将强制使用方括号,这增强了兼容性,尤其是对于以保留关键字命名或以数字开头的对象。