J'extrais avec succès des définitions de colonnes à partir de bases de données hébergées sur un serveur SQL à l'aide de l' OpenSchema()
appel ADO Connection dans ses différentes incarnations afin de pouvoir recréer ces tables par programme dans une autre base de données SQL. Jusqu'ici tout va bien.
L'interaction principale avec les tableaux ci-dessus se produit en utilisant plusieurs vues; alors qu'il OpenSchema()
est capable de renvoyer les définitions de colonne pour la vue de la même manière qu'il renvoie les définitions de colonne pour une table, il manque une information cruciale - à quelle table et colonne dans les tables sous-jacentes la colonne de la vue correspond.
J'ai essayé d'accéder à la commande SQL utilisée pour créer la vue à l'aide des vues de catalogue ADOX, mais il semble que le pilote OLEDB pour SQL Server que nous utilisons ne prend pas en charge cette fonctionnalité.
Existe-t-il un moyen d'obtenir ces informations pour la configuration de la vue via ADO, soit d'une manière qui indique «ColumnX mappe à ColumnY dans la table Z» ou sous la forme de la commande SQL réelle utilisée pour créer la vue?
la source
select m.definition from sys.sql_modules m where m.object_id = object_id('dbo.MyView', 'V')
sys.sql_modules
définit la colonne ainsi:definition nvarchar(max) SQL text that defines this module. NULL = Encrypted.
[n][var]char
données sont tronquées à 256 caractères. Vous pouvez changer cela via le menu deQuery..Query Options...
& mdash; Dans la boîte de dialogue modale qui s'ensuit, accédez auResults>Text
nœud dans le contrôle d'arborescence sur le côté gauche.Microsoft a répertorié les méthodes suivantes pour obtenir la définition d'une vue: 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
la source
Pour les utilisateurs de SQL 2000, la commande réelle qui fournira ces informations est:
select c.text from sysobjects o join syscomments c on c.id = o.id where o.name = '<view_name_here>' and o.type = 'V'
la source
SELECT object_definition (OBJECT_ID(N'dbo.vEmployee'))
la source
Vous pouvez obtenir les détails de la table / afficher via la requête ci-dessous.
Pour la table: sp_help nom_table Pour la vue: sp_help nom_vue
la source
SELECT definition, uses_ansi_nulls, uses_quoted_identifier, is_schema_bound FROM sys.sql_modules WHERE object_id = OBJECT_ID('your View Name');
la source