SQL Azure - copy table between databases

后端 未结 12 2358
天命终不由人
天命终不由人 2020-12-08 13:39

I am trying to run following SQL:

INSERT INTO Suppliers ( [SupplierID], [CompanyName]) 
Select  [SupplierID], [CompanyName] From [AlexDB]..Suppliers
<         


        
相关标签:
12条回答
  • 2020-12-08 14:20

    If you have onprem version that has the sp_addlinkedsrvlogin, you can setup Linked Servers for both source and target database then you can run your insert into query.

    See "SQL Server Support for Linked Server and Distributed Queries against Windows Azure SQL Database" in this blog: https://azure.microsoft.com/en-us/blog/announcing-updates-to-windows-azure-sql-database/

    0 讨论(0)
  • 2020-12-08 14:21

    Unfortunately there is no way to do this in a single query.

    The easiest way to accomplish it is to use "Data Sync" to copy the tables. The benefit of this is that it will also work between servers, and keep your tables in sync.

    http://azure.microsoft.com/en-us/documentation/articles/sql-database-get-started-sql-data-sync/

    In practise, I haven't had that great of an experience with "Data Sync" running in production, but its fine for once off jobs.

    One issue with "Data Sync" is that it will create a large number of "sync" objects in your database, and deleting the actual "Data Sync" from the Azure portal may or may not clean them up. Follow the directions in this article to clean it all up manually:

    https://msgooroo.com/GoorooTHINK/Article/15141/Removing-SQL-Azure-Sync-objects-manually/5215

    0 讨论(0)
  • 2020-12-08 14:22

    Since 2015, this can be done by use of elastic database queries also known as cross database queries.

    I created and used this template, it copies 1.5 million rows in 20 minutes:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
    
    CREATE DATABASE SCOPED CREDENTIAL SQL_Credential  
    WITH IDENTITY = '<username>',
    SECRET = '<password>';
    
    CREATE EXTERNAL DATA SOURCE RemoteReferenceData
    WITH
    (
        TYPE=RDBMS,
        LOCATION='<server>.database.windows.net',
        DATABASE_NAME='<db>',
        CREDENTIAL= SQL_Credential
    );
    
    CREATE EXTERNAL TABLE [dbo].[source_table] (
        [Id] BIGINT NOT NULL,
        ...
    )
    WITH
    (
        DATA_SOURCE = RemoteReferenceData
    )
    
    SELECT *
     INTO target_table
    FROM source_table
    
    0 讨论(0)
  • 2020-12-08 14:24

    You could use a tool like SQL Data Compare from Red Gate Software that can move database contents from one place to another and fully supports SQL Azure. 14-day free trial should let you see if it can do what you need.

    Full disclosure: I work for Red Gate Software

    0 讨论(0)
  • 2020-12-08 14:25

    Use the following steps, there is no straight forward way to do so. But by some trick we can.

    Step1 : Create another one table with the same structure of Suppliers table inside [AlexDB], Say it as SuppliersBackup

    Step2 : Create table with the same structure of Suppliers table inside DesiredDB

    Step3 : Enable Data Sync Between AlexDB..Suppliers and DesiredDB..Suppliers

    Step4 : Truncate data from AlexDB..Suppliers

    Step5 : Copy data from AlexDB..SuppliersBackup to AlexDB..Suppliers

    Step6 : Now run the sync

    Data Copied to DesiredDB.

    0 讨论(0)
  • 2020-12-08 14:25

    You can easily add a "Linked Server" from SQL Management Studio and then query on the fully qualified table name. No need for flat files or export tables. This method also works for on-prem to azure database and vice versa.

    e.g.

    select top 1 ColA, ColB from [AZURE01_<hidden>].<hidden>_UAT_RecoveryTestSrc.dbo.FooTable order by 1 desc
    
    select top 1 ColA, ColB from [AZURE01_<hidden>].<hidden>_UAT_RecoveryTestTgt.dbo.FooTable order by 1 desc
    

    0 讨论(0)
提交回复
热议问题