2014-02-12 2 views
2

У меня есть приложение для рельсов, которое импортирует собственные VIEW.mssql INFORMATION_SCHEMA COLUMNS empty

Теперь самый первый запрос mssql не удается, поскольку информационная схема возвращает 0 строк при запросе доступных столбцов в определенной таблице (для чего необходимо настроить рельсы для объектов).

При подключении к серверу MSSQL через студию, я могу расширить VIEW и увидеть все столбцы необходимы, однако запрашивая информационную схему, как это:

| SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'view'

возвращает нулевые строки.

Я рассмотрел проблему с разрешениями (хотя я не получаю никаких ошибок, просто пустой набор результатов) и вручную предоставил разрешения для представления соответствующему пользователю, и он сохраняется. Я также выполнил запрос в качестве администратора, который фактически создал базы данных и получил еще 0 строк.

Я интересно Wether:

  • есть какая-либо очевидная причина, почему это не удается?
  • MSSQL создает запрос INFORMATION_SCHEMA по требованию, т. Е. Когда я запрашиваю таблицу SCHEMA.COLUMNS, то mssql использует кэшированные данные или фактически запрашивает DB в этой точке, какие столбцы существуют?
  • если ответ: нет. Можно ли перестроить кеш/таблицу COLUMNS?
  • этот запрос вообще работает для VIEW?

Я также перезапустил службу sql и заглянул в базу данных событий в поисках разбитых таблиц, индексов или чего-то еще. Однако события не обнаружили ничего (очевидного).

Что-нибудь еще, что можно упустить?

спасибо, -u

+1

Возможный дубликат: http://stackoverflow.com/questions/7217886/unreliable-information-schema-schema-information-on-sql -server – TTeeple

ответ

0

Используйте этот запрос, чтобы получить имена столбцов для просмотров ...

SELECT C.name 
FROM sys.columns c INNER JOIN sys.views v 
ON c.[object_id] = v.[object_id] 
WHERE v.name = 'Your_View_Name' 

причин, почему вы should'nt использовать информацию представление схемы, Прочитайте эту The case against INFORMATION_SCHEMA views статью Аарон Бертран.

0

Убедитесь, что вы указали полный путь к таблице:

select COLUMN_NAME 
from INFORMATION_SCHEMA.COLUMNS 
where TABLE_CATALOG = 'dbasename' and TABLE_SCHEMA = 'dbo' and TABLE_NAME = 'tablename'