2010-11-22 36 views
1

J'ai la sortie de Tâches Serveurs SQL -> Générer des Scripts ... pour toutes les tables de ma base de données sur un fichier.Existe-t-il un moyen facile de diviser un fichier de script SQL de base de données en un fichier par objet?

Existe-t-il un moyen facile de diviser le script SQL unique en un fichier par table?

De toute évidence, si je pouvais exécuter la tâche Générer des scripts avec le paramètre Fichier par objet sélectionné, je ne poserais pas cette question.

Répondre

0

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 
+0

A travaillé comme un charme. Merci. – mikemerce

2

Exécutez Tâche-> Générer une tâche de scripts. Dans la dernière page de l'assistant, sélectionnez "script to file" et sélectionnez "Fichier par objet". Vous devez spécifier un dossier existant pour la sortie.

+0

J'ai dit dans la question que je ne pouvais pas relancer la tâche Générer des scripts. Merci quand même. – mikemerce