Есть ли способ получить определение представления из SQL Server, используя обычный ADO? - PullRequest
77 голосов
/ 22 января 2011

Я успешно извлекаю определения столбцов из баз данных, размещенных на сервере SQL, используя вызов ADO Connection OpenSchema() в его различных воплощениях, чтобы я мог программно воссоздать эти таблицы в другой базе данных SQL.Пока все хорошо.

Основное взаимодействие с вышеуказанными таблицами происходит с использованием нескольких представлений;в то время как OpenSchema() может возвращать определения столбцов для представления так же, как он возвращает определения столбцов для таблицы, отсутствует критический бит информации - какая таблица и столбец в базовых таблицах соответствует столбцу в представлении.

Я попытался получить доступ к команде SQL, использованной для создания представления, с использованием представлений каталога ADOX, но похоже, что используемый нами драйвер OLEDB для SQL Server не поддерживает эту функцию.

Есть ли какой-нибудь способ получить эту информацию для конфигурации представления через ADO, либо в виде, который гласит «ColumnX сопоставляется с ColumnY в таблице Z», либо в форме фактической команды SQL, используемой для создания представления?*

Ответы [ 5 ]

143 голосов
/ 22 января 2011

Какая версия SQL Server?

Для SQL Server 2005 и более поздних версий вы можете получить сценарий SQL, используемый для создания представления, следующим образом:

select definition
from sys.objects     o
join sys.sql_modules m on m.object_id = o.object_id
where o.object_id = object_id( 'dbo.MyView')
  and o.type      = 'V'

Возвращает одну строку, содержащую скрипт, использованный для создания / изменения представления.

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

Предостережения

  • Если представление в последний раз изменялось с помощью ALTER VIEW, тогда сценарий будет оператором ALTER VIEW, а не оператором CREATE VIEW.

  • Сценарий отражает имя в том виде, в каком оно было создано. Обновление происходит только в том случае, если вы выполняете ALTER VIEW или удаляете и воссоздаете представление с помощью CREATE VIEW. Если представление было переименовано (например, через sp_rename) или право собственности было передано другой схеме, полученный вами скрипт будет отражать исходный оператор CREATE / ALTER VIEW: он не будет отражать текущее имя объекта. *

  • Некоторые инструменты обрезают вывод. Например, средство командной строки MS-SQL sqlcmd.exe обрезает данные до 255 символов. Вы можете передать параметр -y N, чтобы получить результат с N символами.

20 голосов
/ 19 августа 2013

Microsoft перечислила следующие методы получения определения View: http://technet.microsoft.com/en-us/library/ms175067.aspx


USE AdventureWorks2012;
GO
SELECT definition, uses_ansi_nulls, uses_quoted_identifier, is_schema_bound
FROM sys.sql_modules
WHERE object_id = OBJECT_ID('HumanResources.vEmployee'); 
GO

USE AdventureWorks2012; 
GO
SELECT OBJECT_DEFINITION (OBJECT_ID('HumanResources.vEmployee')) 
AS ObjectDefinition; 
GO

EXEC sp_helptext 'HumanResources.vEmployee';
12 голосов
/ 30 июля 2013

Для пользователей SQL 2000 фактическая команда, которая предоставит эту информацию:

select c.text
from sysobjects     o
join syscomments    c on c.id = o.id
where o.name = '<view_name_here>'
  and o.type      = 'V'
5 голосов
/ 24 декабря 2015
SELECT object_definition (OBJECT_ID(N'dbo.vEmployee'))
0 голосов
/ 15 февраля 2019

Вы можете получить информацию о таблице / просмотре через запрос ниже.

Для таблицы: sp_help table_name Для просмотра: sp_help view_name

...