在sql语句中选择*时,是否有方法从列名中删除“u173”?

在sql语句中选择*时,是否有方法从列名中删除“u173”?,sql,sql-server,Sql,Sql Server,我的表有所有的列名 有80多列,我现在无法更改列名 格式为‘‘’。比如名字,姓氏 所以我想改用select*from表 用作 我想通过删除一条语句中的“\u1”来选择它们。反正我能做到? 类似于select语句中的ReplacecoulmnName“',的内容 谢谢您只需重命名查询中的列即可。例如: SELECT FIRST_NAME [First Name], LAST_NAME [Last Name] FROM UserTable 您也可以使用AS关键字,但这是可选的。还

我的表有所有的列名 有80多列,我现在无法更改列名 格式为‘‘’。比如名字,姓氏

所以我想改用select*from表 用作

我想通过删除一条语句中的“\u1”来选择它们。反正我能做到? 类似于select语句中的ReplacecoulmnName“',的内容


谢谢

您只需重命名查询中的列即可。例如:

SELECT FIRST_NAME [First Name],
       LAST_NAME [Last Name]
  FROM UserTable
您也可以使用AS关键字,但这是可选的。还请注意,如果不希望对每个查询都执行此操作,则可以使用此过程创建具有重命名列的视图。然后,您可以使用您想要的方式选择*,尽管出于许多原因,这被认为是一种选择

祝你好运

备选方案-客户端代码中的映射:


另一种选择是在客户机代码中进行映射。此解决方案将在很大程度上取决于您的ORM。大多数ORM(例如LINQ或EF)都允许您重新映射。如果没有其他选项,您可以使用AutoMapper或类似工具使用基于约定的命名来重命名客户端上的列。

您只需在查询中重命名该列即可。例如:

SELECT FIRST_NAME [First Name],
       LAST_NAME [Last Name]
  FROM UserTable
您也可以使用AS关键字,但这是可选的。还请注意,如果不希望对每个查询都执行此操作,则可以使用此过程创建具有重命名列的视图。然后,您可以使用您想要的方式选择*,尽管出于许多原因,这被认为是一种选择

祝你好运

备选方案-客户端代码中的映射:


另一种选择是在客户机代码中进行映射。此解决方案将在很大程度上取决于您的ORM。大多数ORM(例如LINQ或EF)都允许您重新映射。如果没有其他方法,您可以使用AutoMapper或类似工具使用基于约定的命名来重命名客户端上的列。

除非您使用的是动态SQL,否则无法在一条语句中完成此操作。如果您只是试图生成代码,您可以对信息模式运行查询,并获得所需的信息

DECLARE @MaxColumns INT
DECLARE @TableName VARCHAR(20)
SET @TableName = 'Course'
SELECT @MaxColumns = MAX(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName 


SELECT Col 
FROM 
  (
    SELECT 0 Num, 'SELECT' Col
    UNION
    SELECT ROW_NUMBER() OVER (PARTITION BY TABLE_NAME ORDER BY ORDINAL_POSITION) Num, ' [' + COLUMN_NAME + '] AS [' + REPLACE(COLUMN_NAME, '_', '') + ']' + CASE WHEN ORDINAL_POSITION = @MaxColumns THEN '' ELSE ',' END
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = @TableName
    UNION 
    SELECT @MaxColumns + 1 Num, 'FROM ' + @TableName 
  ) s 
ORDER BY num 

除非使用动态SQL,否则不能在单个语句中执行此操作。如果您只是试图生成代码,您可以对信息模式运行查询,并获得所需的信息

DECLARE @MaxColumns INT
DECLARE @TableName VARCHAR(20)
SET @TableName = 'Course'
SELECT @MaxColumns = MAX(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName 


SELECT Col 
FROM 
  (
    SELECT 0 Num, 'SELECT' Col
    UNION
    SELECT ROW_NUMBER() OVER (PARTITION BY TABLE_NAME ORDER BY ORDINAL_POSITION) Num, ' [' + COLUMN_NAME + '] AS [' + REPLACE(COLUMN_NAME, '_', '') + ']' + CASE WHEN ORDINAL_POSITION = @MaxColumns THEN '' ELSE ',' END
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = @TableName
    UNION 
    SELECT @MaxColumns + 1 Num, 'FROM ' + @TableName 
  ) s 
ORDER BY num 

这个问题引起了我的兴趣,我确实找到了一种方法。它可以做到这一点,但如果您只是想在一个查询中一次性提供大量别名,我不推荐这样做

首先,我创建了一个存储过程,提取所有列名,并给它们一个不带“\u1”的别名

USE [DataBase]
GO
IF OBJECT_ID('usp_AlterColumnDisplayName', 'P') IS NOT NULL
    DROP PROCEDURE usp_AlterColumnDisplayName
GO

CREATE PROCEDURE usp_AlterColumnDisplayName 
@TableName VARCHAR(50)
,
@ret nvarchar(MAX) OUTPUT
AS

Select @ret = @ret + [Column name]
From
(
    SELECT ([name] + ' AS ' + '[' + REPLACE([name], '_', ' ') + '], ') [Column name]
    FROM syscolumns
    WHERE id =
        (Select id
        From sysobjects
        Where type = 'U'
        And [name] = @TableName
    )
) T
GO
然后提取该字符串并将其放入另一个具有查询结构的字符串中

执行它,你就完成了

DECLARE @out NVARCHAR(MAX), @DesiredTable VARCHAR(50), @Query NVARCHAR(MAX)
SET @out = ''
SET @DesiredTable = 'YourTable'
EXEC usp_AlterColumnDisplayName 
    @TableName = @DesiredTable,
    @ret = @out OUTPUT
SET @out = LEFT(@out, LEN(@out)-1) --Removing trailing ', '

SET @Query = 'Select ' + @out + ' From ' + @DesiredTable + ' WHERE whatever'

EXEC sp_executesql @Query

如果您只是想一次给出很多别名,而不需要坐在那里为80多列键入别名,我建议您使用一个简单的SELECT语句,如sp或Excel中的语句,然后将粘贴复制到代码中。

这个问题引起了我的兴趣,我确实找到了一种方法。它可以做到这一点,但如果您只是想在一个查询中一次性提供大量别名,我不推荐这样做

首先,我创建了一个存储过程,提取所有列名,并给它们一个不带“\u1”的别名

USE [DataBase]
GO
IF OBJECT_ID('usp_AlterColumnDisplayName', 'P') IS NOT NULL
    DROP PROCEDURE usp_AlterColumnDisplayName
GO

CREATE PROCEDURE usp_AlterColumnDisplayName 
@TableName VARCHAR(50)
,
@ret nvarchar(MAX) OUTPUT
AS

Select @ret = @ret + [Column name]
From
(
    SELECT ([name] + ' AS ' + '[' + REPLACE([name], '_', ' ') + '], ') [Column name]
    FROM syscolumns
    WHERE id =
        (Select id
        From sysobjects
        Where type = 'U'
        And [name] = @TableName
    )
) T
GO
然后提取该字符串并将其放入另一个具有查询结构的字符串中

执行它,你就完成了

DECLARE @out NVARCHAR(MAX), @DesiredTable VARCHAR(50), @Query NVARCHAR(MAX)
SET @out = ''
SET @DesiredTable = 'YourTable'
EXEC usp_AlterColumnDisplayName 
    @TableName = @DesiredTable,
    @ret = @out OUTPUT
SET @out = LEFT(@out, LEN(@out)-1) --Removing trailing ', '

SET @Query = 'Select ' + @out + ' From ' + @DesiredTable + ' WHERE whatever'

EXEC sp_executesql @Query

如果您只是想一次给出很多别名,而不必坐在那里为80多列键入别名,我建议您使用一个简单的SELECT语句,比如sp中的语句,或者在Excel中,然后将粘贴复制到您的代码中。

闲置好奇:AS有什么问题?您最好创建一个视图,然后使用SQL中无法使用的“从视图中选择*”。你是怎么理解他的疑问的?您可以更改客户端的列名吗?Idle好奇:AS有什么问题吗?您可以更好地创建一个视图,然后使用select*from view,这在SQL中是做不到的。你是怎么理解他的疑问的?您可以更改客户端的列名吗?我使用Oracle 11中的列名。您使用什么版本?但我不想在查询中显式声明80+个列名。还有其他方法吗?您可以生成SQL脚本-或者通过从所有的_选项卡_列中选择列_name,其中table_name=。。。;然后使用一个文本编辑器和一些搜索和替换-或者你可以为此编写一个pl/sql例程…@MichaelMcGriff我在9i和10g上遇到了很多问题。也就是说,我删除了这条评论,因为官方认为这应该适用于oracle。@drew\w我在11上从来没有遇到过麻烦+1提到真正的问题是使用SELECT*。我在Oracle 11中使用了SELECT*。您使用什么版本?但我不想在查询中显式声明80+个列名。还有其他方法吗?您可以生成SQL脚本-或者通过从所有的_选项卡_列中选择列_name,其中table_name=。。。;然后使用文本编辑器和一些搜索和替换-或者你可以为此编写一个pl/sql例程…@MichaelMcGriff我对AS o有很多问题
n9i和10g。也就是说,我删除了这条评论,因为官方认为这应该适用于oracle。@drew\w我在11上从来没有遇到过麻烦+1提到真正的问题是使用SELECT*。如果您有多个架构,当然,您需要为正确的架构添加筛选器…如果您有多个架构,当然,您需要为正确的架构添加筛选器。。。