vistas vista ver ventajas varias usar una tipos tablas parametros estructura entre diferencia definicion datos crear consulta con como caracteristicas sql-server view ado

sql server - ver - ¿Hay alguna forma de recuperar la definición de vista de un servidor SQL utilizando ADO simple?



ventajas de usar vistas en sql (4)

Estoy extrayendo con éxito definiciones de columna de bases de datos alojadas en un servidor SQL utilizando la llamada ADO Connection OpenSchema() en sus diversas encarnaciones para que pueda recrear esas tablas en otra base de datos SQL. Hasta aquí todo bien.

La interacción principal con las tablas anteriores ocurre usando vistas múltiples; mientras que OpenSchema() puede devolver las definiciones de columna para la vista de la misma manera que devuelve definiciones de columna para una tabla, falta un dato crucial: qué tabla y columna de las tablas subyacentes está asignada a la columna de la vista. .

Traté de acceder al comando SQL utilizado para crear la vista mediante Vistas de catálogo de ADOX, pero parece que el controlador OLEDB para SQL Server que estamos utilizando no admite esta funcionalidad.

¿Hay alguna forma de obtener esta información para la configuración de 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?


¿Qué versión de SQL Server?

Para SQL Server 2005 y posterior, puede obtener el script SQL utilizado para crear la vista de esta manera:

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''

Esto devuelve una sola fila que contiene la secuencia de comandos utilizada para crear / modificar la vista.

Otras columnas en la tabla hablan sobre las opciones vigentes en el momento en que se compiló la vista.

Advertencias

  • Si la vista se modificó por última vez con ALTER VIEW, entonces el script será una declaración ALTER VIEW en lugar de una declaración CREATE VIEW.

  • El script refleja el nombre tal como fue creado. La única vez que se actualiza es si ejecuta ALTER VIEW, o descarta y recrea la vista con CREATE VIEW. Si se ha cambiado el nombre de la vista (por ejemplo, a través de sp_rename ) o se ha transferido la propiedad a un esquema diferente, la secuencia de comandos que obtenga reflejará la declaración original CREATE / ALTER VIEW: no reflejará el nombre actual de los objetos.

  • Algunas herramientas truncan la salida. Por ejemplo, la herramienta de línea de comandos de MS-SQL sqlcmd.exe trunca los datos en 255 caracteres. Puede pasar el parámetro -y N para obtener el resultado con N caracteres.


Microsoft enumeró los siguientes métodos para obtener una definición de 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

EXEC sp_helptext ''HumanResources.vEmployee'';


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''


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