SELECT *的变体 - 除明确引用的列之外的所有列

时间:2012-06-04 15:38:32

标签: sql-server-2008

有没有办法转换一列,并且能够引用所有其他列而不明确命名它们?

通常我会这样做:

SELECT
      ,[Id]
      ,[Name]
      ,CONVERT(VARCHAR(10),[CreateDate], 104) as [CreateDate] 
  FROM Customers

在完美世界中我能做的是:

SELECT
      *
      ,CONVERT(VARCHAR(10),[CreateDate], 104) as [CreateDate] 
  FROM Customers

其中*表示查询中未明确声明的所有列。

是否有关键字可以让人们这样做或者还有其他方法吗?请记住,它必须在查询中可行 - 不更改表格,制作视图,SP或其他内容。

2 个答案:

答案 0 :(得分:2)

除非您想根据提供查询的列表从sys.columns构建动态SQL,否则没有一种编程方式可以说“除了这一列之外的所有列”(它将非常< / em>很难动态地从查询中派生引用列的列表,尤其是在引入连接,where子句等时。)

但是有一种非常简单的方法可以在不输入所有内容的情况下完成此操作。只需在对象资源管理器中展开表,然后将“列”节点拖到查询编辑器窗口中。现在只需从列表中删除CreateDate列。

答案 1 :(得分:0)

我希望避免键入长字段列表,在编辑器中选择表名,然后按alt-f1。这与输入“sp_help table”相同。您将获得包含该表的所有列名称的结果集。我将该列表复制到编辑器中并添加逗号。

通过在编辑器中使用搜索和替换,在所有行的末尾添加逗号的简单方法:

  1. 仅选择具有列名称的行。
  2. 选中“使用”,然后从下拉列表中选择“正则表达式”。
  3. 在“查找内容”类型中,$(美元符号表示行尾)
  4. 在“替换为”类型中,
  5. 这将在每个选定行的末尾添加逗号。

    另一种方法是右键单击对象资源管理器中的表,然后单击“select top 1000”选项,该选项将在另一个文本编辑器窗口中为您创建脚本。