Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server从列名中删除尾随字符_Sql Server - Fatal编程技术网

Sql server SQL Server从列名中删除尾随字符

Sql server SQL Server从列名中删除尾随字符,sql-server,Sql Server,我有一个表,其中的列包含尾随的哈希符号: SELECT * Table Id DisplayName_55270A70 OSVersion_66DD9B43 1 NURAPP001 Windows Server 2008 Id DisplayName OSVersion 1 NURAPP001 Windows Server 2008 对于生成此模式的工具的每次安装,表模式似乎都是唯一的。我想创建一个查询,不使用存储过程,它将

我有一个表,其中的列包含尾随的哈希符号:

SELECT * Table

Id DisplayName_55270A70 OSVersion_66DD9B43
1  NURAPP001            Windows Server 2008
Id DisplayName          OSVersion
1  NURAPP001            Windows Server 2008
对于生成此模式的工具的每次安装,表模式似乎都是唯一的。我想创建一个查询,不使用存储过程,它将生成不带哈希符号的列:

SELECT * Table

Id DisplayName_55270A70 OSVersion_66DD9B43
1  NURAPP001            Windows Server 2008
Id DisplayName          OSVersion
1  NURAPP001            Windows Server 2008
我能够用以下查询生成逗号分隔的列列表,但我对SQL server了解不够,无法将其转换为可执行查询:

SELECT REPLACE(
(SELECT COLUMN_NAME AS 'data()'
 FROM INFORMATION_SCHEMA.COLUMNS
 WHERE TABLE_NAME='MTV_OperatingSystem' 
 ORDER BY ORDINAL_POSITION
 FOR XML PATH(''))
,' ',', ')

信用到期:

不改变现有模式;不使用
*
而是显式指定列名,为以下列指定
表别名

select Id,
DisplayName_55270A70 as DisplayName,
OSVersion_66DD9B43 as OSVersion
from mytable;

如果您不想再次键入,请考虑创建< <代码>视图>代码>(存储的查询),与

相同。
create view myview 
as
select Id,
DisplayName_55270A70 as DisplayName,
OSVersion_66DD9B43 as OSVersion
from mytable;

然后下一次运行,您只需从myview执行一个
select*

即可创建并执行查询,如下所示:

DECLARE @cols NVARCHAR(MAX)
SET @cols = REPLACE(
(SELECT COLUMN_NAME AS 'data()'
 FROM INFORMATION_SCHEMA.COLUMNS
 WHERE TABLE_NAME='BankAcctInfo' 
 ORDER BY ORDINAL_POSITION
 FOR XML PATH(''))
,' ',', ')

DECLARE @EXEC NVARCHAR(MAX)
SET @EXEC = 'SELECT ' + @cols + ' FROM YOURTABLENAME'

EXEC(@EXEC)

是否有任何列的名称中有下划线(除了在散列的开头)?如果尾随字符前面总是有下划线(
\uuu
),只要列名称中没有要保留的下划线,就有可能。您可能需要
信息\u架构。列
系统视图。是的,表中的所有列都遵循相同的约定。正如我提到的,这个表的模式因实例而异。为了说明:Rahul,正如我提到的,这个表的模式因实例而异。举例说明:实例1:Id DisplayName\u 55270A70 OSVersion\u 66DD9B43实例2:Id DisplayName\u 55270BBB OSVersion\u 66DD9CCC如果我提前知道列名,我会直接在查询中使用别名,选择DisplayName\u 55270BBB作为DisplayName。这是一件奇怪的事情。在这种情况下,您必须从
信息\u架构
进行查询,并相应地修改列名(或)使用修改后的列名创建一个辅助表。是的,这是一款名为System Center Operations Manager的Microsoft产品。MTV_操作系统和其他视图都是这样设计的。谢谢,@thepirat000。不幸的是,查询是通过JDBC从Java调用的,因此我无法定义局部变量并执行存储过程。