Sous les options "Script vers", vous pouvez choisir de créer comme script ce que vous voulez. Est-il possible d'obtenir une structure de table correspondante pour une vue en utilisant une méthode similaire?Est-il possible de scripter une vue en tant que table dans SQL Server?
Répondre
Vous pouvez faire SELECT INTO
depuis la vue à une nouvelle table, puis le script. Peut-être sauver un peu de frappe si c'est la motivation pour la question.
C'est la structure de la table que je veux reproduire, pas les données. –
C'est pourquoi aucune donnée n'a été insérée! Une fois la nouvelle table existante, vous pouvez utiliser la fonctionnalité standard de SSMS pour le script. –
Je suis confus, dites-vous que je dois créer la table manuellement? –
Si vous voulez générer une instruction CREATE TABLE
en fonction des colonnes sélectionnées dans la définition d'une vue, je ne connais aucun moyen de le faire sans étapes intermédiaires, telles que suggérées par @Martin.
Voici ce que nous utilisons pour le faire.
Tout le crédit pour la passe ci-dessous au poste haut here et @Zanlok dont la version révisée et je l'ai utilisé pour regarder des règlements ultérieurs vues plutôt que des tables:
SELECT
t.TABLE_CATALOG,
t.TABLE_SCHEMA,
t.TABLE_NAME,
'create table '+QuoteName(t.TABLE_SCHEMA)+'.' + QuoteName(so.name) + ' (' + LEFT(o.List, Len(o.List)-1) + '); '
+ CASE WHEN tc.Constraint_Name IS NULL THEN ''
ELSE
'ALTER TABLE ' + QuoteName(t.TABLE_SCHEMA)+'.' + QuoteName(so.name)
+ ' ADD CONSTRAINT ' + tc.Constraint_Name + ' PRIMARY KEY ' + ' (' + LEFT(j.List, Len(j.List)-1) + '); '
END as 'SQL_CREATE_TABLE'
FROM sysobjects so
CROSS APPLY (
SELECT
' ['+column_name+'] '
+ data_type
+ case data_type
when 'sql_variant' then ''
when 'text' then ''
when 'ntext' then ''
when 'decimal' then '(' + cast(numeric_precision as varchar) + ', ' + cast(numeric_scale as varchar) + ')'
else
coalesce(
'('+ case when character_maximum_length = -1
then 'MAX'
else cast(character_maximum_length as varchar) end
+ ')','')
end
+ ' '
+ case when exists (
SELECT id
FROM syscolumns
WHERE
object_name(id) = so.name
and name = column_name
and columnproperty(id,name,'IsIdentity') = 1
) then
'IDENTITY(' +
cast(ident_seed(so.name) as varchar) + ',' +
cast(ident_incr(so.name) as varchar) + ')'
else ''
end
+ ' '
+ (case when IS_NULLABLE = 'No' then 'NOT ' else '' end)
+ 'NULL '
+ case when information_schema.columns.COLUMN_DEFAULT IS NOT NULL THEN 'DEFAULT '+ information_schema.columns.COLUMN_DEFAULT
ELSE ''
END
+ ',' -- can't have a field name or we'll end up with XML
FROM information_schema.columns
WHERE table_name = so.name
ORDER BY ordinal_position
FOR XML PATH('')
) o (list)
LEFT JOIN information_schema.table_constraints tc on
tc.Table_name = so.Name
AND tc.Constraint_Type = 'PRIMARY KEY'
LEFT JOIN information_schema.tables t on
t.Table_name = so.Name
CROSS APPLY (
SELECT QuoteName(Column_Name) + ', '
FROM information_schema.key_column_usage kcu
WHERE kcu.Constraint_Name = tc.Constraint_Name
ORDER BY ORDINAL_POSITION
FOR XML PATH('')
) j (list)
WHERE
xtype = 'V'
AND name NOT IN ('dtproperties')
-- AND so.name = 'ASPStateTempSessions'
;
Si vous avez accès à SSIS, insérer un flux de données. Pour la source, utilisez votre vue. Pour la destination, utilisez la nouvelle table. La table entière sera générée avec la colonne et les types de données. Si vous ne voulez pas transférer de données, vous pouvez le laisser tel quel. Votre table aurait déjà été créée lorsque vous cliqueriez sur Oui pour enregistrer votre flux de données. Maintenant, vous pouvez aller au SSMS et générer un script si vous souhaitez voir les noms de colonnes et les types de données pour la nouvelle table que vous venez de générer.
Si vous l'avez installé, vous pouvez utiliser l'Assistant Importation et exportation de SQL Server. Définissez votre source et votre destination sur le même serveur, la source étant la vue, la destination étant une nouvelle table. Cela prendra les définitions de colonnes de la vue et créera une nouvelle table avec ces définitions. L'inconvénient évident est que la nouvelle table aura les données de l'ancienne vue, ce qui pourrait être un problème si vous avez un grand nombre de lignes à la suite de la vue. La meilleure façon de contourner cela et de créer une table vide avec la définition de la vue est de sélectionner l'option « Ecrire une requête pour spécifier les données à transférer » dans le wizare et utiliser un code comme ceci:
SELECT * FROM YourView WHERE 1=2
Puisque 1 n'est pas égal à 2, aucune ligne ne sera retournée, mais la définition de la colonne sera conservée et la nouvelle table sera créée avec cette définition.
Espérons que ça aide!
- 1. SQL Server XSD SimpleType xs: liste en tant que table?
- 2. Zéro en tant que clé primaire dans SQL Server 2008
- 3. Comment puis-je stocker des données dans une table en tant que trie? (SQL Server)
- 4. Servir une vue en tant que fichier dans asp.net mvc
- 5. Microsoft SQL Server 2000 DTS en tant que texte
- 6. Partition Exchange en tant que technique de publication dans SQL Server?
- 7. SQL Server en tant que client Serivce Web
- 8. SQL Server Management Studio en tant que plateforme d'applications
- 9. Transformer une table SQL en XML avec une colonne en tant que nœud parent
- 10. Renvoyer une requête SQL en tant que tableau dans Powershell
- 11. Retour Vue partielle en tant que JsonResult
- 12. Vous souhaitez scripter tous les objets qui dépendent d'une table SQL Server
- 13. en utilisant IF dans une vue SQL Server
- 14. Comment scripter les diagrammes de base de données du serveur sql dans sql server 2005?
- 15. Dans une procédure PL/SQL, comment transmettre un nom de table en tant que paramètre?
- 16. NavigationController en tant que sous-vue
- 17. UIPickerView en tant que sous-vue
- 18. Est-il possible de créer une table avec la même disposition qu'une vue dans SQL Server 2005?
- 19. Rechercher une table verrouillée dans SQL Server
- 20. Verrouiller une table dans SQL Server
- 21. Est-il possible de passer le nom de la table en tant que paramètre dans Oracle?
- 22. Sortie SQL en tant que classement
- 23. Comment créer une table en lecture seule dans SQL Server?
- 24. Comment créer une clé primaire en tant que A1/D-M/100000 dans SQL Server 2005?
- 25. UITableAfficher les détails en tant que sous-vue
- 26. SQL Server: Est-il possible de mettre à jour en cascade une table auto-référencée?
- 27. UISearchBar en tant que sous-vue de UITableView
- 28. noms SQL de la colonne Sélection en tant que valeurs
- 29. Comment empêcher asp: FormView de rendre en tant que table?
- 30. Transmettre une variable au nom complet en tant que base de données dans une requête SQL
Vous voulez générer une instruction CREATE TABLE en fonction des colonnes sélectionnées dans la définition d'une vue? Pas aussi loin que je sache ... –
Cette question m'a fait penser à http://stackoverflow.com/questions/21547/in-sql-server-how-do-i-generate-a-create-table-statement -pour une table donnée, ce qui peut ou peut ne pas vous aider. – Justin
@djacobson, je commence à penser que tu as raison. Postez-le comme une réponse et je vais accepter. –