SQL Server: получение определенных имен таблиц из запроса

Можно ли отображать в запросе только определенные имена таблиц:

USE [WebContact] 

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'memberEmails'

В большинстве случаев мне понадобятся все имена таблиц, но бывают ситуации, когда мне нужны только определенные имена строк.

Когда я пытаюсь сделать следующее:

USE [WebContact] 

SELECT COLUMN_NAME, ContactDateTime 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'memberEmails'

Это говорит мне, что

Недопустимое имя столбца «ContactDateTime»

хотя это одно из имен строк.

Возможно ли это сделать?


person StealthRT    schedule 22.04.2016    source источник
comment
ContactDateTime может быть столбцом в ВАШЕЙ таблице memberEmails - но это наверняка НЕ столбец в INFORMATION_SCHEMA.COLUMNS....   -  person marc_s    schedule 22.04.2016


Ответы (3)


Столбец ContactDateTime может быть столбцом в вашей таблице, но не столбцом в представлении INFORMATION_SCHEMA.COLUMNS.

Поскольку это не столбец, SQL Server выдаст ошибку, говоря, что он недействителен.

Я думаю, что вы пытаетесь добавить в свое утверждение еще одно предложение WHERE:

USE [WebContact] 
SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'memberEmails'
AND [COLUMN_NAME] = 'ContactDateTime'; -- Here!

Или, если вы хотите добавить несколько столбцов...

USE [WebContact] 
SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'memberEmails'
AND [COLUMN_NAME] 
  IN ('ContactDateTime', 'column2', 'column3', ... 'column(n)'); -- Here!

Также см. здесь доводы против использования INFORMATION_SCHEMAS.

person Shaneis    schedule 22.04.2016
comment
Последний пример, кажется, тот, который мне нужен. Спасибо, Шанис! - person StealthRT; 22.04.2016
comment
ах... да... без проблем... а если серьезно, изучите радости sys.columns и sys.tables и оставьте INFORMATION_SCHEMA себе :) - person Shaneis; 22.04.2016

если ContactDateTime - это столбец, который вы ищете в таблице memberEmails, вы можете сделать это

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'memberEmails'
and COLUMN_NAME='ContactDateTime'
person cableload    schedule 22.04.2016
comment
Это работает с более чем одним именем строки? Когда я пытаюсь добавить еще один и, он возвращается с пустыми данными. - person StealthRT; 22.04.2016
comment
в этом случае вы должны использовать синтаксис in, такой как select .... where...column_name in ('ContactDateTime','AnotherColumnName') - person cableload; 22.04.2016

Представление INFORMATION_SCHEMA.COLUMNS не имеет имени столбца ContactDateTime. Сначала прочитайте документ

person Pham X. Bach    schedule 22.04.2016