2016-12-23 5 views
1

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

select COLUMN_NAME 
from INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'G001' 

Но теперь, когда я хочу, чтобы получить имя столбца таблицы из указанной базы данных, для того же я использую ниже запроса, но это не дает никаких выходных данных.

В частности. HS - это мое имя базы данных из нескольких баз данных, а G001 - это мое имя таблицы.

И в моем случае мне нужно передать имя базы данных и имя таблицы в качестве параметра.

select COLUMN_NAME 
from INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'HS..G001' 

Так что мой вопрос: как получить столбец таблицы из конкретной базы данных?

ответ

2

Вы используете INFORMATION_SCHEMA в базе данных вы хотите запросить, например:

SELECT COLUMN_NAME 
FROM HS.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME='G001' 

Если вам нужно передать это в качестве параметра, то вам нужно написать некоторый динамический SQL:

DECLARE @database VARCHAR(255) = 'HS' 
DECLARE @table VARCHAR(255) = 'G001' 

DECLARE @sql VARCHAR(1000) = 'SELECT COLUMN_NAME 
           FROM ' + @database + '.INFORMATION_SCHEMA.COLUMNS 
           WHERE TABLE_NAME = ''' + @table + '''' 

EXEC(@sql) 

Примечание: Динамический SQL, подобный этому, может быть уязвим для SQL-инъекций, поэтому убедитесь, что вы дезинфицируете свои входы.

+0

К сожалению, моя вина, я пытался без '.COLUMNS' – McNets

+0

Я не расспрашивал, мой английский недостаточно вежлив. Прости. – McNets

0

Simplay поставил имя базы данных перед следующим образом:

select COLUMN_NAME from [<database_name>].INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='G001' 
0

просто используйте:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME='HS..G001' 
    AND TABLE_SCHEMA='database_name' 
Смежные вопросы