RSS Подписка на статьи RSS Подписка на комментарии Панель инструментов

Блог профессионалов стал частью сайта технической поддержки DocsVision http://support.docsvision.com. Новые материалы будут появляться уже на этом сайте.

Поиск

Ярлыки

авто генерация кода (1) Администрирование DocsVision (60) Атрибутивный поиск (3) База данных (24) Базы знаний (1) Безопасность (1) Бизнес-процессы (20) Блог (2) Вы увидите это первыми (1) Групповые политики (1) Диаграммы (2) Задания (2) Интеграция (2) Карточки DocsVision (14) Конструктор Решений (11) Маркетинг и продажи (4) Навигатор (3) Новое (3) Новости (32) Опрос (4) Опросы DocsVision (4) Оптимизация (3) Отчеты (2) Ошибки (1) Поддержка (14) Полезные ссылки (1) Представления (4) Производительность (5) Разбор полетов (18) Разработка для Workflow (7) разработка карточек (2) Разработка на платформе DocsVision (41) Разработка решений (43) Расширение платформы (1) Расширенные отчеты (9) Решения на платформе DocsVision (6) Сервисы DocsVision (3) Сканеры (3) Справочник сотрудников (1) Справочник типов (1) Установка (1) Утилиты (13) Шлюз в SharePoint (8) Штрихкод (2) Cкрипты карточек (7) DocsVision внутри (1) DocsVision Live (1) FileStream (1) FireFox (2) Opera (1) Powershell (5) Safari (1) SharePoint2007 (1) SharePoint2010 (2) Silverlight (1) UltraViews (1) Vista (1)

Импорт и экспорт таблиц базы данных

Как решить задачу сравнения записей в двух таблицах на разных серверах БД. Если используется MS SQL Server 2008, то можно составить t-sql запрос сразу к двум серверам - это данная СУБД позволяет делать.
В случае если используется более ранняя версия, то я выгружаю таблицу из одной базы и загружаю её во временную таблицу другой. Возможно, есть более просто способ, но я пользуюсь таким.

Для выгрузки используется утилита bcp.exe, которая входит в поставку MS SQL Server:
bcp.exe <полное имя таблицы> out <полный путь к файлу> -T -c -C RAW

bcp.exe basename1.dbo.dvsys_users out C:\temp\table.dat -T -c -C RAW


Далее в той базе, в которую будем импортировать нужно создать временную таблицу, с такими же колонками. Проще всего это сделать, получив скрипт создания таблицы.

Для этого выбираем нужную таблицу в базе (в нашем примере это dvsys_users) и в контекстном меню вызываем следующий пункт

Script table as / Create to / New query editor window

Получаем:

USE [dv1640]
GO

/****** Object: Table [dbo].[dvsys_users] Script Date: 08/05/2009 18:52:59 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[dvsys_users](
[UserID] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[AccountName] [varchar](64) NOT NULL,
[UserRefID] [uniqueidentifier] NULL,
[SID] [varchar](128) NOT NULL,
[Timestamp] [timestamp] NULL,
CONSTRAINT [pk_dvsys_users] PRIMARY KEY NONCLUSTERED
(
[UserID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
.....

Ключи нам не нужны, оставляем только создание таблицы и колонок:

CREATE TABLE [dbo].[dvsys_TMPusers](
[UserID] [uniqueidentifier],
[AccountName] [varchar](64),
[UserRefID] [uniqueidentifier],
[SID] [varchar](128),
[Timestamp] [timestamp]
)


Все, осталось только загрузить данные

bcp.exe basename2.dbo.dvsys_TMPusers in C:\temp\table.dat -T -c -C RAW

и выполнить запрос, например поиск записей, у которых одинаковый AccountName и разный UserID

SELECT * FROM dvsys_users AS t1
JOIN dvsys_TMPusers AS t2 ON t1.AccountName=t2.AccountName
WHERE t1.UserID<>t2.UserID
Читать дальше

3 коммент.:

alive комментирует...

Запрос к двум и более серверам можно делать и в SQL2005, и в 2000.
Курите SQL Books Online по ключевому слову linked server.
Обращение к "чужой" таблице будет выглядеть как
[имя прилинкованного сервера].[имя БД].dbo.[имя таблицы]

Михаил Захаров комментирует...

Спасибо, действительно можно через linked servers

IsAlex комментирует...

как вариант
неплохо справляется с этим
redgate sql data compare

Отправить комментарий