Есть ли простой способ разбить файл сценария SQL базы данных на один файл на объект? - PullRequest
1 голос
/ 22 ноября 2010

У меня есть выходные данные SQL Server Tasks -> Generate Scripts ... для всех таблиц в моей базе данных в одном файле.

Есть ли простой способ разбить один скрипт SQL на один файлза таблицу?

Очевидно, что если бы я мог запустить задачу «Создать сценарии» с выбранной настройкой «Файл для объекта», я бы не стал спрашивать об этом.

Ответы [ 2 ]

2 голосов
/ 22 ноября 2010

Выполнить задачу-> Создать задачу сценариев. На последней странице мастера выберите «скрипт в файл» и выберите «Файл на объект». Вы должны указать существующую папку для вывода.

0 голосов
/ 22 ноября 2010

Использование PowerShell. Не зная формат вашего файла SQL, это может или не может работать. Это должно, по крайней мере, дать вам отправную точку. Он начинает запись в файл "table.sql", но позже переименовывает файл в tablename .sql

1.   $lineNumber = 0
2.   $inputFile = "test.sql"
3.   foreach ($line in Get-Content $inputFile) {
4.     if ($line -match "create table") { 
5.        $w = [regex]::Replace($line, "^.+\.\[(\w+)\].+$", '$1')
6.        $outFile = "$w.sql"
7.        $lineNumber = 1
8.     }
9.     if (($line -match "use \[dbaInventory\]") -and ($lineNumber -gt 0)) {
10.        Move-Item -LiteralPath "table.sql" -Destination $outFile
11.     }
12.     $line | Out-file -FilePath table.sql -Append
13.  }
14.  Move-Item -LiteralPath "table.sql" -Destination $outFile

Измените строку 2 для любого объединенного файла sql, который у вас есть, и строку 9, чтобы найти любое имя базы данных, подходящее для вашего сценария.

Вот пример файла "test.sql", который я использовал для тестирования.

USE [dbaInventory]
GO

/****** Object:  Table [dbo].[tableOne]    Script Date: 11/22/2010 12:28:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[tableOne](
    [colA] [smallint] NULL,
    [colB] [char](1) NULL,
    [colC] [decimal](10, 2) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO

USE [dbaInventory]
GO

/****** Object:  Table [dbo].[tableTwo]    Script Date: 11/22/2010 12:28:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[tableTwo](
    [col_A] [char](1) NULL,
    [col_B] [decimal](10, 2) NULL,
    [col_C] [smallint] NULL,
 CONSTRAINT [Pk_tableTwo] PRIMARY KEY CLUSTERED 
(
    [col_A] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
...