Estou extraindo com êxito as definições de coluna de bancos de dados hospedados em um servidor SQL usando a OpenSchema()
chamada ADO Connection em suas várias encarnações, para que possa recriar programaticamente essas tabelas em outro banco de dados SQL. Por enquanto, tudo bem.
A principal interação com as tabelas acima ocorre usando múltiplas visualizações; embora OpenSchema()
seja capaz de retornar as definições de coluna para a visão da mesma maneira que retorna as definições de coluna para uma tabela, uma parte crucial de informação está faltando - para qual tabela e coluna nas tabelas subjacentes a coluna na visão mapeia.
Tentei acessar o comando SQL usado para criar a exibição usando ADOX Catalog Views, mas parece que o driver OLEDB para SQL Server que estamos usando não oferece suporte a essa funcionalidade.
Existe alguma maneira de obter essas informações para a configuração do modo de exibição por meio do ADO, seja de uma forma que indique "A coluna X mapeia para a coluna Y na tabela Z" ou na forma do comando SQL real usado para criar o modo de exibição?
fonte
select m.definition from sys.sql_modules m where m.object_id = object_id('dbo.MyView', 'V')
sys.sql_modules
define a coluna assim:definition nvarchar(max) SQL text that defines this module. NULL = Encrypted.
[n][var]char
dados são truncados em 256 caracteres. Você pode alterar isso através do menu emQuery..Query Options...
& mdash; Na caixa de diálogo modal subsequente, faça uma busca detalhada até oResults>Text
nó no controle de árvore no lado esquerdo.A Microsoft listou os seguintes métodos para obter uma definição de exibição: 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
fonte
Para usuários do SQL 2000, o comando real que fornecerá essas informações é:
select c.text from sysobjects o join syscomments c on c.id = o.id where o.name = '<view_name_here>' and o.type = 'V'
fonte
SELECT object_definition (OBJECT_ID(N'dbo.vEmployee'))
fonte
Você pode obter detalhes da tabela / visualização por meio da consulta abaixo.
Para tabela: sp_help table_name Para Exibir: sp_help view_name
fonte
SELECT definition, uses_ansi_nulls, uses_quoted_identifier, is_schema_bound FROM sys.sql_modules WHERE object_id = OBJECT_ID('your View Name');
fonte
Este exemplo: Coleção de visualizações, Exemplo de propriedade CommandText (VB) Mostra como usar ADOX para manter VIEWS alterando COMMAND relacionado a VIEW. Mas em vez disso, use-o assim:
Set cmd = cat.Views("AllCustomers").Command ' Update the CommandText of the command. cmd.CommandText = _ "Select CustomerId, CompanyName, ContactName From Customers"
apenas tente usar desta forma:
Set CommandText = cat.Views("AllCustomers").Command.CommandText
fonte