2015-06-03 2 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. К сожалению, запрос вызывается из Java через 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, как я уже упоминал, схема этой таблицы варьируется от экземпляра к экземпляру. Для иллюстрации: Instance 1: Id DisplayName_55270A70 OSVersion_66DD9B43 instance2: Id DisplayName_55270BBB OSVersion_66DD9CCC Если бы я знал, что имена столбцов раньше времени, я бы просто использовать псевдонимы непосредственно в запросе ВЫБРАТЬ DisplayName_55270BBB AS DisplayName. –

+0

Это странно. В этом случае вам нужно будет запросить информацию из 'INFORMATION_SCHEMA' и соответствующим образом изменить имена столбцов (или) создать вспомогательную таблицу с измененными именами столбцов. – Rahul

+0

Да, это продукт Microsoft под названием System Center Operations Manager. MTV_OperatingSystem и другие виды созданы таким образом. –

Смежные вопросы