SQL objektumok scriptelése Powershellben
Azt már mindenki tudja, h PS-ben lehet kiválóan scriptet generálni a SQL entitásokról a Script() metódus segítségével. Felvetődött egy kérdés vkiben, hogy hogyan lehet csak DB sémát backupolni, és felvetődött erre a Powershell, meg a get-contentitem|%{$_.Script()}, mint alapgondolat. Ja, ez ezt adja vissza egy új táblámra:
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[KeynoteDaily](
[day] [date] NOT NULL,
[site] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[measurements] [smallint] NULL,
[failures] [smallint] NULL,
[contenterrors] [smallint] NULL,
[availability_wc] [real] NULL,
[availability_woc] [real] NULL,
[errors] [varchar](1000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[loadtime] [smalldatetime] NULL,
[comment] [varchar](2000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
Szóval jól néz ki, nem? Nem. addig néz ki jól, amíg nem jut eszembe, hogy van primary key is a táblán. Meg még további indexek. Amiket persze megint ki lehet scriptelni: ˘
%{$_.Indexes}|%{$_.script()}
Meg még ki tudja, mi marad ki. Na mindegy, tuti megoldást nem tudok, de ez olyan lámának tűnt, hogy elkezdtem nézegetni a metódusokat, és találtam egy olyat, hogy EnumScript():
PS > gci |%{$_.EnumScript()}
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[KeynoteDaily](
[day] [date] NOT NULL,
[site] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[measurements] [smallint] NULL,
[failures] [smallint] NULL,
[contenterrors] [smallint] NULL,
[availability_wc] [real] NULL,
[availability_woc] [real] NULL,
[errors] [varchar](1000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[loadtime] [smalldatetime] NULL,
[comment] [varchar](2000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
CONSTRAINT [PK_KeynoteDaily] PRIMARY KEY CLUSTERED
(
[site] ASC,
[day] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE NONCLUSTERED INDEX [ix_test] ON [dbo].[KeynoteDaily]
(
[failures] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
CREATE NONCLUSTERED INDEX [ix_test2] ON [dbo].[KeynoteDaily]
(
[measurements] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Vagyis ő megcsinálja nekünk a rekurziót. Szerintem aranyos kényelmi szolgáltatás.
Ja, a fentiekhez a teljes path a következő volt: PS SQLSERVER:\SQL\MYCOMPUTER\DENALI\Databases\MyDatabase\Tables> . Csak a tisztánlátás kedvéért.
