114 votes

Existe-t-il un moyen de récupérer la définition de la vue à partir d'un serveur SQL en utilisant ADO ?

Je parviens à extraire des définitions de colonnes à partir de bases de données hébergées sur un serveur SQL à l'aide de la connexion ADO. OpenSchema() dans ses différentes incarnations afin que je puisse recréer par programme ces tables dans une autre base de données SQL. Jusqu'à présent, tout va bien.

La principale interaction avec les tableaux ci-dessus se fait par l'utilisation de vues multiples. OpenSchema() est en mesure de renvoyer les définitions des colonnes de la vue de la même manière qu'il renvoie les définitions des colonnes d'une table, il manque une information cruciale, à savoir la table et la colonne des tables sous-jacentes auxquelles la colonne de la vue correspond.

J'ai essayé d'accéder à la commande SQL utilisée pour créer la vue en utilisant ADOX Catalog Views, mais il semble que le pilote OLEDB pour SQL Server que nous utilisons ne supporte pas cette fonctionnalité.

Existe-t-il un moyen d'obtenir ces informations pour la configuration de la vue via ADO, soit sous la forme "ColumnX maps to ColumnY in table Z", soit sous la forme de la commande SQL utilisée pour créer la vue ?

202voto

Nicholas Carey Points 24614

Quelle version de SQL Server ?

Pour SQL Server 2005 et les versions ultérieures, vous pouvez obtenir le script utilisé pour créer la vue comme suit :

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'

Elle renvoie une seule ligne contenant le script utilisé pour créer/modifier la vue.

D'autres colonnes du tableau donnent des informations sur les options en place au moment où la vue a été compilée.

Mises en garde

  • Si la vue a été modifiée pour la dernière fois avec ALTER VIEW, le script sera une instruction ALTER VIEW plutôt qu'une instruction CREATE VIEW.

  • Le script reflète le nom tel qu'il a été créé. Il n'est mis à jour que si vous exécutez ALTER VIEW, ou si vous abandonnez et recréez la vue avec CREATE VIEW. Si la vue a été renommée (par exemple, via la commande sp_rename ) ou que la propriété a été transférée à un schéma différent, le script que vous obtiendrez en retour reflétera l'instruction CREATE/ALTER VIEW d'origine : il ne reflétera pas le nom actuel de l'objet.

  • Certains outils tronquent la sortie. Par exemple, l'outil de ligne de commande MS-SQL sqlcmd.exe tronque les données à 255 caractères. Vous pouvez passer le paramètre -y N pour obtenir le résultat avec N caractères.

33voto

DaveAlger Points 317

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

EXEC sp_helptext 'HumanResources.vEmployee';

15voto

TravelinGuy Points 33

Pour les utilisateurs de SQL 2000, la commande qui fournit cette information est la suivante :

select c.text
from sysobjects     o
join syscomments    c on c.id = o.id
where o.name = '<view_name_here>'
  and o.type      = 'V'

11voto

STiAT Points 109
SELECT object_definition (OBJECT_ID(N'dbo.vEmployee'))

3voto

vkstream Points 508

Vous pouvez obtenir les détails de la table/vue à l'aide de la requête ci-dessous.

Pour la table : sp_help nom_de_la_table Pour voir : sp_help nom_de_la_vue

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X