2015-06-03 79 views
1

我有包含尾隨散列符號的表:的SQL Server刪除尾隨字符

SELECT * Table 

Id DisplayName_55270A70 OSVersion_66DD9B43 
1 NURAPP001   Windows Server 2008 

的表模式似乎是產生這個架構工具的每個安裝獨一無二的。我想創建一個查詢,而不訴諸存儲過程,會產生不列哈希符號:

Id DisplayName   OSVersion 
1 NURAPP001   Windows Server 2008 

我能產品以逗號分隔的用下面的查詢列的清單,但我不知道有足夠的瞭解SQL服務器將其轉換成可執行查詢:

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

信貸由於:在不改變現有的模式http://www.sql-ex.com/help/select20.php

+0

是否有任何列在其名稱中有下劃線(除了在散列開始處)? – Synergist

+0

如果尾部字符總是以下劃線('_')開頭,那麼只要列名中沒有要保留的下劃線,就可以。您可能需要'INFORMATION_SCHEMA.COLUMNS'系統視圖。 – HoneyBadger

+0

是的,表中的所有列遵循相同的約定。哈希結束。 –

回答

1

您可以創建和EXECUTE執行查詢,像這樣:

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) 
+0

謝謝你,@ thepirat000。不幸的是,查詢是通過JDBC調用的,所以我不能定義本地變量並執行存儲過程。 –

1

;而是採用*如果你指定的列名明確指定爲列table alias

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

如果您想不會再輸入一次,考慮與創建view(存儲查詢)像

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

然後下次運行,你可以做一個select * from myview

+0

Rahul,正如我所提到的,此表的模式因實例而異。舉例說明: Rahul,正如我所提到的,該表的模式因實例而異。爲了說明: 實例1: 標識DisplayName_55270A70 OSVersion_66DD9B43 實例2: 標識DisplayName_55270BBB OSVersion_66DD9CCC 如果我知道時間提前列名,我只想用別名直接在查詢SELECT DisplayName_55270BBB AS顯示名稱。 –

+0

這是一件奇怪的事情。在這種情況下,您將不得不從「INFORMATION_SCHEMA」進行查詢並相應地修改列名稱(或)創建具有修改列名稱的輔助表。 – Rahul

+0

是的,這是一款名爲System Center Operations Manager的微軟產品。 MTV_OperatingSystem和其他視圖都是這樣設計的。 –