APSQL

Créer une table avec les objets SMO et le PowerShell

Suite à la mise en route de SQLPS et l'exploration simple des premières fonctionnalités offertes par cet outil de scripting en Power Shell, il convient d'aller plus loin en travaillant avec les objets SMO. Comme rien ne remplace un exemple pour comprendre comment travailler avec l'exemple présenté ici à pour objet de définir sur une base existante une table. La structure retenue pour cette table nommée Individus est la suivante:

  • Id de type int identity
  • Nom de type nvarchar(80)
  • Prenom de type nvarchar(80)

La première opération depuis SQLPS va être de se positionner sur l'instance sur la laquelle on souhaite travailler. Dans le cas présent cela s'effectue de la façon suivante:

Se positionner sur le serveur courant

Il est ensuite nécessaire d'établir la connexion entre les objets SMO et l'instance sur laquelle SQLPS est connecté.Pour cela il suffit de définir un nouvel objet de type Microsoft.SqlServer.Management.Smo.Server. Cette création ainsi que l'affichage des informations de bases du serveur est réalisé à l'aide du script suivant:

$server=New-Object Microsoft.SqlServer.Management.Smo.Server
$server.Information.Version

Soit dans le cadre de l'exemple actuel:

Afficher les informations sur du serveur

Maintenant que l'objet $server représente le serveur courant, la création d'une table ne peut intervenir qu'àprès s'être positionné sur la base qui va contenir cette table. Pour réaliser cette opération (habituellement réalisée en Trnasact SQL avec l'instruction USE) le script suivant est exécuté:

$bdd=[Microsoft.SqlServer.Management.Smo.Database]$server.Databases["Test"]

Ici encore, il est possible de verifier la la selection de la base se déroule correctement en demandant par exemple le simple affichage de son nom de la façon suivante:

$bdd.Name

Ce qui donne dans le contexte de l'exemple:

Le nom de la base de données

La dernière opération consiste à créer une table. Pour cela l’objet Microsoft.SqlServer.Management.Smo.Table sera utilisé. Bien entendu avant la demande de création de table,, il est nécessaire d’y définir une ou plusieurs colonnes. Les colonnes sont représentées par des objets de type Microsoft.SqlServer.Management.Smo.Column. Le script suivant illustre la création d’une table avec une colonne de type int.

$table=New-Object Microsoft.SqlServer.Management.Smo.Table($bdd,"uneTable")
$colonne1=New-Object Microsoft.SqlServer.Management.Smo.Column
$colonne1.Name="code"
$colonne1.Parent=$table
$colonne1.DataType=([Microsoft.SqlServer.Management.Smo.DataType]::Int)
$table.Columns.Add($colonne1)
$table.Create()

Maintenant que les différents sont vus, il est possible de définir la table telle qu'exposée initialement. Pour définir le type identity, les propriétés Identity, IdentityIncrement et IdentitySeed serons utilisées.

# Script de creation de table
$server=New-Object Microsoft.SqlServer.Management.Smo.Server
$server.Information.Version
# Se positionner sur la base de travail
$bdd=[Microsoft.SqlServer.Management.Smo.Database]$server.Databases["Test"]
$bdd.Name
# Définir la structure de la table
$table=New-Object Microsoft.SqlServer.Management.Smo.Table($bdd,"Individus")
$table.Name
#Définir la colonne id
$colonne1=New-Object Microsoft.SqlServer.Management.Smo.Column
$colonne1.Name="id"
$colonne1.Parent=$table
$colonne1.DataType=([Microsoft.SqlServer.Management.Smo.DataType]::Int)
$colonne1.IdentityIncrement=1
$colonne1.IdentitySeed=1
$colonne1.Identity=$True
$table.Columns.Add($colonne1)
#Définir la colonne nom
$colonne2=New-Object Microsoft.SqlServer.Management.Smo.Column
$colonne2.Name="nom"
$colonne2.Parent=$table
$colonne2.DataType=([Microsoft.SqlServer.Management.Smo.DataType]::NVarchar(50))
$table.Columns.Add($colonne2)
#Définir la colonne prenom
$colonne3=New-Object Microsoft.SqlServer.Management.Smo.Column
$colonne3.Name="prenom"
$colonne3.Parent=$table
$colonne3.DataType=([Microsoft.SqlServer.Management.Smo.DataType]::NVarchar(80))
$table.Columns.Add($colonne3)
# Créer la table
$table.Create()