我的表中包含所有列名 (有超过80列,我现在无法更改列名) 格式为' _'。像First_Name,Last_Name,...
所以我想改用select * from table
使用AS。
我想通过删除' _'来选择它们。在一个声明中。无论如何我能做到吗?
在select语句中有Replace(coulmnName, '_','')
之类的东西吗?
由于
答案 0 :(得分:5)
您只需重命名查询中的列即可。例如:
SELECT FIRST_NAME [First Name],
LAST_NAME [Last Name]
FROM UserTable
您也可以使用AS
关键字,但这是可选的。另请注意,如果您不想在每个查询上执行此操作,则可以使用此过程创建具有重命名列的视图。然后,您可以按照您希望的方式使用SELECT *
(尽管出于多种原因,这被视为bad idea)。
祝你好运!
替代方案 - 在客户代码中映射:
另一种选择是在客户端代码中进行映射。该解决方案将在很大程度上取决于您的ORM。大多数ORM(例如LINQ或EF)将允许您重新映射。如果没有别的,您可以使用AutoMapper或类似方法使用基于约定的命名重命名客户端上的列。
答案 1 :(得分:1)
除非您使用动态SQL,否则无法在单个语句中执行此操作。如果您只是尝试生成代码,则可以针对Information_Schema运行查询并获取所需的信息...
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
答案 2 :(得分:0)
这个问题引起了我的兴趣,我确实找到了一种方法。它实现了它,但如果你只是想在一个查询中给出很多别名,我就不会推荐它。
首先,我创建了一个存储过程,它提取了所有列名,并为它们提供了一个没有'_'的别名。
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然后将粘贴复制到您的代码中。