Estoy extrayendo con éxito definiciones de columna de bases de datos alojadas en un servidor SQL utilizando la OpenSchema()
llamada de conexión ADO en sus diversas encarnaciones para poder recrear esas tablas mediante programación en otra base de datos SQL. Hasta ahora tan bueno.
La interacción principal con las tablas anteriores ocurre usando múltiples vistas; si bien OpenSchema()
puede devolver las definiciones de columna para la vista de la misma manera que devuelve las definiciones de columna para una tabla, falta un poco de información crucial: a qué tabla y columna de las tablas subyacentes se asigna la columna de la vista.
Intenté acceder al comando SQL utilizado para crear la vista usando Vistas de catálogo ADOX, pero parece que el controlador OLEDB para SQL Server que estamos usando no admite esta funcionalidad.
¿Hay alguna forma de obtener esta información para la configuración de la vista a través de ADO, ya sea de una manera que indique "ColumnX se asigna a ColumnY en la tabla Z" o en la forma del comando SQL real utilizado para crear la vista?
fuente
select m.definition from sys.sql_modules m where m.object_id = object_id('dbo.MyView', 'V')
sys.sql_modules
define la columna así:definition nvarchar(max) SQL text that defines this module. NULL = Encrypted.
[n][var]char
datos se truncan a 256 caracteres. Puede cambiar eso a través del menú enQuery..Query Options...
& mdash; Desde el siguiente cuadro de diálogo modal, profundice en elResults>Text
nodo en el control de árbol en el lado izquierdo.Microsoft enumeró los siguientes métodos para obtener la definición de una vista: 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
fuente
Para los usuarios de SQL 2000, el comando real que proporcionará esta información 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'
fuente
SELECT object_definition (OBJECT_ID(N'dbo.vEmployee'))
fuente
Puede obtener detalles de la tabla / ver a través de la siguiente consulta.
Para la tabla: sp_help table_name Para la vista: sp_help view_name
fuente
SELECT definition, uses_ansi_nulls, uses_quoted_identifier, is_schema_bound FROM sys.sql_modules WHERE object_id = OBJECT_ID('your View Name');
fuente