Partindo da mesma ideia do artigo anterior, apresento agora a utilização do SMO em um script PowerShell com objetivo de criar e manipular uma tabela no SQL Server:
# Referências [void][system.reflection.assembly]::loadfrom("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Smo.dll") # Objetos $server = new-object Microsoft.SqlServer.Management.Smo.Server(".\SQLEXPRESS") # CREATE DATABASE [Estoque] $database = new-object Microsoft.SqlServer.Management.Smo.Database($server, "Estoque") $database.Create() # Tipos a serem utilizados $constraint_pk = [Microsoft.SqlServer.Management.Smo.IndexKeyType]::DriPrimaryKey $type_int = [Microsoft.SqlServer.Management.Smo.DataType]::Int $type_money =[Microsoft.SqlServer.Management.Smo.DataType]::Money $type_varchar250 = [Microsoft.SqlServer.Management.Smo.DataType]::VarChar(250) $type_decimal5_2 = [Microsoft.SqlServer.Management.Smo.DataType]::Decimal(2, 5) $type_datetime = [Microsoft.SqlServer.Management.Smo.DataType]::DateTime # CREATE TABLE [dbo].[Produto] $table = new-object Microsoft.SqlServer.Management.Smo.Table($database, "Produto", "dbo") # [Id] [int] IDENTITY(1,1) NOT NULL $col = new-object Microsoft.SqlServer.Management.Smo.Column($table, "Id", $type_int) $col.Nullable = $FALSE $col.Identity = $TRUE $table.Columns.Add($col) # [Nome] [varchar](250) NOT NULL $col = new-object Microsoft.SqlServer.Management.Smo.Column($table, "Nome", $type_varchar250) $col.Nullable = $FALSE $table.Columns.Add($col) # [Quantidade] [int] NOT NULL $col = new-object Microsoft.SqlServer.Management.Smo.Column($table, "Quantidade", $type_int) $col.Nullable = $FALSE $table.Columns.Add($col) # [Valor] [money] NOT NULL $col = new-object Microsoft.SqlServer.Management.Smo.Column($table, "Valor", $type_money) $col.Nullable = $FALSE $table.Columns.Add($col) # [Peso] [decimal](5, 2) NOT NULL $col = new-object Microsoft.SqlServer.Management.Smo.Column($table, "Peso", $type_decimal5_2) $col.Nullable = $FALSE $table.Columns.Add($col) # [Frete] [money] NULL $col = new-object Microsoft.SqlServer.Management.Smo.Column($table, "Frete", $type_money) $col.Nullable = $TRUE $table.Columns.Add($col) $table.Create() # ALTER TABLE [dbo].[Produto] # DROP COLUMN [Frete] $table.Columns["Frete"].Drop() # ALTER TABLE [dbo].[Produto] # ADD CONSTRAINT [PK_Produto] PRIMARY KEY ([Id]) $pk = new-object Microsoft.SqlServer.Management.Smo.Index($table, "PK_Produto") $pk.IndexKeyType = $constraint_pk $col = new-object Microsoft.SqlServer.Management.Smo.IndexedColumn($pk, "Id") $pk.IndexedColumns.Add($col) $pk.Create() # Criando colunas em tabelas já existentes: ## Forma #1 # ALTER TABLE [dbo].[Produto] # ADD [CategoriaId] [int] NOT NULL $col = new-object Microsoft.SqlServer.Management.Smo.Column($table, "CategoriaId", $type_int) $col.Nullable = $FALSE $table.Columns.Add($col) $table.Alter() ## Forma #2 # ALTER TABLE [dbo].[Produto] # ADD [DataCadastro] [datetime] NOT NULL $col = new-object Microsoft.SqlServer.Management.Smo.Column($table, "DataCadastro", $type_datetime) $col.Nullable = $FALSE $col.Create() # DROP TABLE [dbo].[Produto] $table.Drop() # DROP DATABASE [dbo].[Estoque] $database.Drop()