Подтвердить что ты не робот

Есть ли способ получить определение представления с SQL Server, используя простой ADO?

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

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

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

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

4b9b3361

Ответ 1

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

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

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'

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

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

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

  • Если последнее изменение было изменено с помощью ALTER VIEW, то script будет оператором ALTER VIEW, а не оператором CREATE VIEW.

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

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

Ответ 2

Для пользователей 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'

Ответ 3

Microsoft указала следующие методы получения определения вида: 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';

Ответ 4

SELECT object_definition (OBJECT_ID(N'dbo.vEmployee'))