2017-01-31 4 views
2

Я пытаюсь выяснить, как создать копию таблицы с одного связанного сервера на другой внутри Management Studio. Я создал оба связанных сервера, и я могу их запросить. Тем не менее, один экземпляр SQL Server, а другой - ODBC-соединение с соединением QuickBooks QODBC.SELECT * INTO [newdatabase]. [Table] FROM [otherdatabase]. [Table]

При запросе экземпляра SQL Server я выполнить запрос, как этот

SELECT * 
FROM [MYSERVERNAME\SQLSERVICEINSTANCE].[DATABASENAME].[DBO].[TABLENAME] 

При выполнении запроса к базе данных QODBC QuickBooks я выполнить запрос, как этот

SELECT * 
FROM OPENQUERY(QUICKBOOKS, 'SELECT * FROM Invoice') 

Как я могу выбрать * в SQLSERVER. Счета-фактуры от QUICKBOOKS.Invoices?

ответ

2

select * into SQLSERVER.Invoices FROM QUICKBOOKS.Invoices на самом деле довольно близко к тому, что вы хотите.

insert into [DATABASENAME].[DBO].[TABLENAME] 
(column1, columns2) 
SELECT column1, columns2 
FROM OPENQUERY(QUICKBOOKS, 'SELECT * FROM Invoice') 

Теперь, я думаю, вы хотите делать это регулярно? Самый простой способ это запустить это первый, чтобы очистить таблицу назначения:

TRUNCATE TABLE [DATABASENAME].[DBO].[TABLENAME] 

Если вы хотите, чтобы сделать точную копию используйте:

USE [DATABASENAME] 


IF EXISTS (
    SELECT * FROM sys.objects 
    WHERE object_id =  OBJECT_ID(N'[DBO].[TABLENAME] ') 
    AND type in (N'U') 
    ) 
DROP TABLE [DBO].[TABLENAME] 


SELECT * 
into [DBO].[TABLENAME] 
FROM OPENQUERY(QUICKBOOKS, 'SELECT * FROM Invoice') 

Вы можете совать любого из этих сценариев в sql agent job, чтобы регулярно обновлять

+0

Это именно то, что я хочу сделать, но я не хочу указывать имена столбцов. В случае добавления нового столбца в QuickBooks я хочу просто выполнить INSERT INTO SELECT * FROM – Phil

+0

по существу, я хочу создать точную копию таблицы из QuickBooks в мою базу данных SQL Server, но без указания каждого колонка – Phil

Смежные вопросы