Delirium
12-02-2010, 09:37
Иногда бывает необходимо (или просто удобно) забекапить какую то таблицу, но не бекапом, а скриптом. Т.е. сделать скрипт, который будет создавать таблицу и сразу вставлять в нее нужные данные. Нашел на просторах сети замечательную программу на http://www.eugenedotnet.com/(S(xolx3o3zg0w41k55wgalyq45))/Insert-Script-Generator.ashx
Инсталлятор доступен по адресу http://www.eugenedotnet.com/codeexamples/InsertScriptGenerator/InsertScriptGenerator.zip
Что она делает: Выбираем базу, таблицу и сразу генерируется скрипт.
Пример:
IF('Actions' in (SELECT t.[name] FROM sys.tables t JOIN sys.columns c ON (c.[object_id] = t.[object_id]) WHERE 0 < c.[is_identity])) SET IDENTITY_INSERT [dbo].[Actions] ON
INSERT INTO [dbo].[Actions](id, Action_name) VALUES( 1, 'Продам ' )
INSERT INTO [dbo].[Actions](id, Action_name) VALUES( 2, 'Куплю' )
INSERT INTO [dbo].[Actions](id, Action_name) VALUES( 3, 'Сдам' )
INSERT INTO [dbo].[Actions](id, Action_name) VALUES( 4, 'Обменяю' )
IF('Actions' in (SELECT t.[name] FROM sys.tables t JOIN sys.columns c ON (c.[object_id] = t.[object_id]) WHERE 0 < c.[is_identity])) SET IDENTITY_INSERT [dbo].[Actions] OFF
Скрипт создания таблицы можно получить через консоль управления SQL сервером. Скрестив оба скрипта, получив готовый бекап таблицы.
Результат
USE [YourBD]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[ВАША_ТАБЛИЦА](
[id] [int] IDENTITY(1,1) NOT NULL,
[Action_name] [char](50) COLLATE Cyrillic_General_CI_AS NOT NULL,
CONSTRAINT [PK_Actions] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
IF('ВАША_ТАБЛИЦА' in (SELECT t.[name] FROM sys.tables t JOIN sys.columns c ON (c.[object_id] = t.[object_id]) WHERE 0 < c.[is_identity])) SET IDENTITY_INSERT [dbo].[ВАША_ТАБЛИЦА] ON
INSERT INTO [dbo].[ВАША_ТАБЛИЦА](id, Action_name) VALUES( 1, 'Продам ' )
INSERT INTO [dbo].[ВАША_ТАБЛИЦА](id, Action_name) VALUES( 2, 'Куплю ' )
INSERT INTO [dbo].[ВАША_ТАБЛИЦА](id, Action_name) VALUES( 3, 'Сдам ' )
INSERT INTO [dbo].[ВАША_ТАБЛИЦА](id, Action_name) VALUES( 4, 'Обменяю ' )
IF('ВАША_ТАБЛИЦА' in (SELECT t.[name] FROM sys.tables t JOIN sys.columns c ON (c.[object_id] = t.[object_id]) WHERE 0 < c.[is_identity])) SET IDENTITY_INSERT [dbo].[ВАША_ТАБЛИЦА] OFF
Очень удобно при создании базы через программу.
P.S. Может, кому и пригодится, т.к. искал долго и муторно, а так будет для всех :)
Инсталлятор доступен по адресу http://www.eugenedotnet.com/codeexamples/InsertScriptGenerator/InsertScriptGenerator.zip
Что она делает: Выбираем базу, таблицу и сразу генерируется скрипт.
Пример:
IF('Actions' in (SELECT t.[name] FROM sys.tables t JOIN sys.columns c ON (c.[object_id] = t.[object_id]) WHERE 0 < c.[is_identity])) SET IDENTITY_INSERT [dbo].[Actions] ON
INSERT INTO [dbo].[Actions](id, Action_name) VALUES( 1, 'Продам ' )
INSERT INTO [dbo].[Actions](id, Action_name) VALUES( 2, 'Куплю' )
INSERT INTO [dbo].[Actions](id, Action_name) VALUES( 3, 'Сдам' )
INSERT INTO [dbo].[Actions](id, Action_name) VALUES( 4, 'Обменяю' )
IF('Actions' in (SELECT t.[name] FROM sys.tables t JOIN sys.columns c ON (c.[object_id] = t.[object_id]) WHERE 0 < c.[is_identity])) SET IDENTITY_INSERT [dbo].[Actions] OFF
Скрипт создания таблицы можно получить через консоль управления SQL сервером. Скрестив оба скрипта, получив готовый бекап таблицы.
Результат
USE [YourBD]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[ВАША_ТАБЛИЦА](
[id] [int] IDENTITY(1,1) NOT NULL,
[Action_name] [char](50) COLLATE Cyrillic_General_CI_AS NOT NULL,
CONSTRAINT [PK_Actions] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
IF('ВАША_ТАБЛИЦА' in (SELECT t.[name] FROM sys.tables t JOIN sys.columns c ON (c.[object_id] = t.[object_id]) WHERE 0 < c.[is_identity])) SET IDENTITY_INSERT [dbo].[ВАША_ТАБЛИЦА] ON
INSERT INTO [dbo].[ВАША_ТАБЛИЦА](id, Action_name) VALUES( 1, 'Продам ' )
INSERT INTO [dbo].[ВАША_ТАБЛИЦА](id, Action_name) VALUES( 2, 'Куплю ' )
INSERT INTO [dbo].[ВАША_ТАБЛИЦА](id, Action_name) VALUES( 3, 'Сдам ' )
INSERT INTO [dbo].[ВАША_ТАБЛИЦА](id, Action_name) VALUES( 4, 'Обменяю ' )
IF('ВАША_ТАБЛИЦА' in (SELECT t.[name] FROM sys.tables t JOIN sys.columns c ON (c.[object_id] = t.[object_id]) WHERE 0 < c.[is_identity])) SET IDENTITY_INSERT [dbo].[ВАША_ТАБЛИЦА] OFF
Очень удобно при создании базы через программу.
P.S. Может, кому и пригодится, т.к. искал долго и муторно, а так будет для всех :)