【问题标题】:SELECT * INTO [newdatabase].[table] FROM [otherdatabase].[table]SELECT * INTO [newdatabase].[table] FROM [otherdatabase].[table]
【发布时间】:2017-01-31 22:33:35
【问题描述】:

我试图弄清楚如何在 Management Studio 中创建从一个链接服务器到另一个链接服务器的表副本。我已经创建了两个链接服务器,我可以查询它们。但是,一个是 SQL Server 实例,另一个是到 QuickBooks QODBC 连接的 ODBC 连接。

查询 SQL Server 实例时,我会运行这样的查询

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

查询 QODBC QuickBooks 数据库时,我会运行这样的查询

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

如何在 SQLSERVER.Invoices FROM QUICKBOOKS.Invoices 中选择 *?

【问题讨论】:

    标签: sql-server tsql openquery


    【解决方案1】:

    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 代理作业中以定期刷新

    【讨论】:

    • 这正是我想要做的,但我不想指定列名。如果在 QuickBooks 中添加了新列,我只想执行 INSERT INTO SELECT * FROM
    • 本质上,我想将 QuickBooks 中的表的精确副本创建到我的 SQL Server 数据库中,但不必指定每一列
    猜你喜欢
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2014-12-12
    相关资源
    最近更新 更多