Utilisation de PowerShell. Sans connaître le format de votre fichier SQL, cela peut fonctionner ou non. Cela devrait au moins vous donner un point de départ. Il commence à écrire au fichier « table.sql » mais renomme plus tard, le fichier en tant que 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
Modifier la ligne 2 pour tout fichier sql combiné que vous avez actuellement et la ligne 9 à chercher quel que soit le nom de la base de données est approprié à votre script.
Voici un exemple du fichier "test.sql" que j'ai utilisé pour les tests.
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
A travaillé comme un charme. Merci. – mikemerce