Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Бекап таблицы через INSERT (http://forum.oszone.net/showthread.php?t=167119)

Delirium 12-02-2010 09:37 1345222

Бекап таблицы через INSERT
 
Иногда бывает необходимо (или просто удобно) забекапить какую то таблицу, но не бекапом, а скриптом. Т.е. сделать скрипт, который будет создавать таблицу и сразу вставлять в нее нужные данные. Нашел на просторах сети замечательную программу на http://www.eugenedotnet.com/(S(xolx3...Generator.ashx
Инсталлятор доступен по адресу http://www.eugenedotnet.com/codeexam...tGenerator.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. Может, кому и пригодится, т.к. искал долго и муторно, а так будет для всех :)

fomin_ 12-02-2010 11:41 1345313

А чем Ваш вариант лучше/хуже стандартного через утилиту BCP?
http://msdn.microsoft.com/en-us/library/ms162802.aspx

Delirium 15-02-2010 02:12 1347299

Если честно, то я не нашел данную утилиту. Но, почитав ее, могу ответить - отличается простотой использования для конечного пользователя :) А в целом, конечно, bcp дает те же результаты и даже больше, но в ней и дольше разбираться.


Время: 09:08.

Время: 09:08.
© OSzone.net 2001-