2013-04-03 4 views
-1

я обычно все имена столбцов таблицы в SQL сервера со следующим SQLКак найти все имена столбцов синонима

SELECT Upper(column_name) FROM information_schema.columns 
WHERE table_name ='mutable' 

Однако, теперь я хочу, чтобы найти все имена столбцов для синонима. Каков способ сделать это?

+1

Почему бы вы назвали 'UPPER' на что-то, прежде чем сравнивать его со значением, которое содержит строчные буквы? –

+0

опечатка с моей стороны. Я изменил имя таблицы перед отправкой вопроса – Anthony

ответ

2

IMHO you shouldn't use INFORMATION_SCHEMA for any of this. Ниже будет работать на столе или вид:

SELECT UPPER(name) 
    FROM sys.columns 
    WHERE OBJECT_NAME([object_id]) = N'mutable'; 

Ниже будет работать на синоним (требование вы изменили позже):

SELECT UPPER(name) 
    FROM sys.columns AS c 
    CROSS APPLY 
    (
    SELECT name 
    FROM sys.synonyms 
    WHERE name = N'mutable' 
    AND OBJECT_ID([base_object_name]) = c.[object_id] 
) AS x; 

Вы также можете просто сказать:

DECLARE @obj INT; 

SELECT @obj = OBJECT_ID([base_object_name]) 
    FROM sys.synonyms WHERE name = N'mutable'; 

SELECT UPPER(name) FROM sys.columns WHERE [object_id] = @obj; 
+0

извините, я имел в виду 'синоним', а не' view'. Я изменил вопрос. Запрос, который вы предоставили, не работает для синонима ... – Anthony

+3

@Sharma, конечно, мой оригинальный ответ не работал для синонима, потому что вы никогда не упоминали синонимы. Если бы вы спросили, как это сделать в SQL Server, но на самом деле означает Oracle, возможно, это тоже не сработает. –

2

Вы можете использовать sys.synonyms, чтобы открыть base_object_name, и оттуда использовать sys.columns, как @Aaron показал:

select * from sys.columns where 
    object_id = OBJECT_ID((select base_object_name from sys.synonyms 
        where name='mutable')) 
0

Попробуйте выбрать верхние нулевые строки из синонима в таблицу темп. Это создаст таблицу с теми же именами столбцов, что и базовый объект. А затем запрос sys.columns в базе данных TempDb:

SELECT TOP(0) * INTO #tmpColumns FROM mutable; 
SELECT name FROM tempdb.sys.columns WHERE object_id = OBJECT_ID('tempdb.dbo.#tmpColumns'); 
Смежные вопросы