Créer Une Vue Avec Le Sql Dynamique
Je suis en train de créer une Base de données dynamique de création de script.
Il y a beaucoup d'étapes et de nous créer cette base de données souvent de sorte que le script ressemble à quelque chose comme ça.
DECLARE @databaseName nvarchar(100) = 'DatabaseName'
EXEC('/*A lot of database creation code built off of @databaseName*/')
Tout est bon, sauf pour un point de vue que nous créons dans cette base de données.
Le problème tel que je le comprends provient de trois règles SQL concernant la commande EXEC
- Contextes d'UTILISATION sont uniquement actif pour la vie de l'EXEC
- "CRÉER une VUE" doit être la première instruction dans un traitement de requêtes
- ALLER n'est pas vraiment une Commande SQL et en tant que tel n'est pas autorisé dans le sql dynamique
- Sur CRÉER une VUE, vous pouvez spécifier uniquement le bas de Schéma.
Voici donc trois choses que j'ai essayé sans succès.
--1.Results in my view not being created in my database
EXEC ('USE [' + @databaseName + ']')
EXEC ('CREATE VIEW')
--2.Results in a 'CREATE VIEW' must be the first statement in a query batch
EXEC
('
USE [' + @databaseName + ']
CREATE VIEW
')
--3.Results in Incorrect syntax near 'GO'
EXEC
('
USE [' + @databaseName + ']
GO
CREATE VIEW
')
--4.Results in 'CREATE/ALTER VIEW' does not allow specifying the database name as a prefix to the object name.
EXEC ('CREATE VIEW [' + @databaseName + '].[dbo].[ViewName]')
Des suggestions? Je pense que cela devrait être un bon cas d'utilisation, mais Google n'était pas en mesure de m'aider.
OriginalL'auteur Mark Rucker | 2014-01-16
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire en double imbrication de la dynamique des instructions SQL, puis:
Voici une autre bonne réponse dba.stackexchange.com/a/56956/30584
WOW! Été bashing ma tête sur un problème pendant 3 jours et n'a jamais pensé de cette approche! Génial, merci!
Plus de 2 ans plus tard, et il est toujours très utile. Merci!!!!
OriginalL'auteur DaveShaw
Au lieu de double de nidification, une autre approche est de créer une procédure stockée dont le seul but est de s'exécute SQL dynamique
La procédure stockée ci-dessus peut être ré-utilisé. Quand vous en avez besoin pour créer un affichage il suffit d'appeler la procédure stockée et passer le sql dynamique.
Je préfère cette approche parce que le sql dynamique est assez déroutant et en ajoutant le double de nidification complique davantage.
OriginalL'auteur Dave