2009-11-19 7 views
1

Nous permettons à nos utilisations de modifier certaines vues pour les rapports et ce qui ne repose pas sur certaines méta-données de champ d'application que nous gardons la trace dans notre application. Ces champs peuvent être créés lors de l'exécution. J'ai un processus standard en place pour modifier les vues lorsqu'un champ est ajouté ou supprimé. J'ai maintenant besoin de faire cela par programme, ce qui signifie que je dois être capable de tirer le script Alter actuel, faire mes modifications, puis l'exécuter sur la base de données. Les deux dernières étapes sont assez faciles, mais la première partie me donne quelques problèmes.Comment puis-je récupérer par programmation le script alter view pour une vue dans SQL Server 2005

Les décisions de conception de côté (comme ils sont hors de mes mains dans ce cas particulier). Je voudrais savoir comment récupérer le script de vue Alter utilisé par Sql Server Management Studio pour la commande View-> Edit.

J'ai besoin de la même sortie que cette commande car j'ai des commentaires dans mes scripts qui permettent mes modifications. Questions connexes, mais pas tout à fait ce que je cherche.

How do I programmatically retrieve SQL Server stored procedure source that is identical to the source returned by the SQL Server Management Studio gui?

In MSSQL, how do I generate a CREATE TABLE statement for a given table?

Répondre

4

SSMS utilise SMO sous les couvertures. Le Scripter peut récupérer la définition de n'importe quel objet SQL.

Si vous souhaitez une approche basée sur T-SQL, utilisez sys.sql_modules, il contient la définition T-SQL de tous les objets non cryptés dans la base de données, y compris les vues.

+0

Je ne pouvais obtenir de scripts que pour faire des drop et créer des instructions, mais pas modifier les instructions. – Peter

0

Je pense que j'ai la réponse à cela finalement. En parcourant le profileur SQL, je suis tombé sur une requête que j'ai modifiée pour la suivante. Ceci renvoie mon script de vue sous la forme d'une instruction ddl 'Create View' complète avec des commentaires. C'est sur une ligne cependant, donc je dois insérer des nouvelles lignes après n'importe quels commentaires. Nous devrons voir si cela est réalisable.

+0

Il s'agit probablement d'une ligne car vous utilisez Results to Grid dans SSMS, ce qui est inutile pour renvoyer du code T-SQL. Essayez d'utiliser les résultats au texte (Ctrl + T). –

+0

J'ai trouvé que c'était le cas une fois que j'ai vraiment eu le problème. Merci pour le conseil si. Je n'avais jamais essayé les résultats à la commande de texte avant. –

2
SELECT [definition] 
FROM sys.sql_modules 
WHERE [object_id] = OBJECT_ID('dbo.' + @ViewName); 

-- you don't need the type check if you are passing in the name of a view 
-- you can do the schema check using OBJECT_ID instead of an extra join 

-- if you want to reference system_sql_modules it is unlikely they 
-- will have dbo schema, if you want to support this use a separate query IMHO 
+0

Merci de l'avoir nettoyé un peu. Cela a beaucoup de sens une fois que vous le voyez, mais je ne sais pas grand-chose sur les tables système, alors celle-ci m'a posé quelques problèmes. –

3

Vous pouvez obtenir la vue de créer le script de la table Information_Schema.Views:

SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='<view name>' 

De là, vous pouvez le modifier pour construire votre besoin ALTER mais vous.