SQL Data Transfer

后端 未结 6 393
天命终不由人
天命终不由人 2021-01-14 05:03

I need to transfer data from one table to the same table in another server which has been truncated. What is the easiest way to do this?

相关标签:
6条回答
  • 2021-01-14 05:10

    Use the SQL Server Import and Export wizard. It's probably the easiest way to accomplish this task.

    For more advanced data transfer, consider using bcp utility, BULK INSERT statement and OPENDATASOURCE.

    0 讨论(0)
  • 2021-01-14 05:17

    Setup linked servers and then use the following on the destination database:

    INSERT INTO existingTable (col1,col2..)
    
    SELECT col1,col2...
    FROM linkedserver.dbo.database.othertable
    
    0 讨论(0)
  • 2021-01-14 05:23

    This is the script I like to use for this. Easy to use, and is mostly bug-free. Just copy the text below into your query window, and follow the directions. After you run it you will have a bunch of insert statements that you can run on the other server.


    /*
    Use this script to create insert statements for each row in the specified table.
    
    Instructions:
    1. Set the database you want to script from as normal.
    
    2. change the set @TableName = '<YourTableName>' line to be the
    table you want to script out.
    
    3. Run the script and copy all the text from the results below
    the line with all the dashes (----).
    
    Notes:
       If you get the error message "Invalid object name '<YourTableName>'."
       then you either forgot to set the correct database or you spelled
       your table name wrong
    
    Credits:
      Bob Wiechman - Fix for smalldatetime support
      Richard Lesh - correct support of uniqueidentifiers, automatic
            setting of Identity off/on, add Where clause support, more detail in
          debug mode.
    */
    
    declare @TableName sysname
    declare @WhereClause  varchar(1024)
    declare @IdentityInsert int
    declare @ColName sysname
    declare @ColType tinyint
    declare @ColStatus tinyint
    declare @DebugMode bit
    declare @ColList nvarchar(4000)
    declare @ValList nvarchar(4000)
    declare @SQL1 nvarchar(1000)
    declare @SQL2 nchar(10)
    declare @SQL3 nchar(1000)
    
    set @TableName = '<YourTableName>' --  '<YourTableName>'
    set @WhereClause = ''               -- limit scope of inserts
    set @DebugMode = 0                  -- set to 1 if you only want a script
    
    set @IdentityInsert = 0                -- set to 1 if you want to force IDENTITY_INSERT statements
    
    set @ColList = ''
    set @ValList = ''
    set @SQL1 = 'select replace(''insert into ' + @TableName + ' ('
    set @SQL2 = ') values ('
    set @SQL3 = ')'', ''''''null'''''', ''null'') from ' + @TableName
    
    if @DebugMode = 1 print '-- StmtShell: ' + @sql1 + @sql2 + @sql3
    
    declare csrColumns cursor local fast_forward for
      select c.name, c.xtype, c.status
      from syscolumns c
        inner join sysobjects o
          on o.id = c.id
      where o.name = @TableName
        and o.xtype in ('U', 'S')
      order by ColID
    
    open csrColumns
    fetch next from csrColumns into @ColName, @ColType, @ColStatus
    
    while @@fetch_status = 0
    begin
      set @ColList = @ColList + ' ' + @ColName
      if @ColType in (173, 104, 106, 62, 56, 60, 108, 59, 52, 122, 48, 165)    -- numeric types (nulls not supported yet)
        set @ValList = @ValList + ' ''+convert(varchar(200),' + @ColName + ')+'''
      else if @ColType in (175, 239, 231, 231, 167)                            -- uid and string types
        set @ValList = @ValList + ' ''''''+isnull(' + @ColName + ',''null'')+'''''''
      else if @ColType in (58, 61)                                             -- dates (nulls not supported yet)
        set @ValList = @ValList + ' ''''''+convert(varchar(200),' + @ColName + ')+'''''''
      else if @ColType = 36                                                    -- uniqueidentfiers (nulls not supported yet)
        set @ValList = @ValList + ' ''''{''+convert(varchar(200),' + @ColName + ')+''}'''''
      if @DebugMode = 1             begin print '-- @ValList: ' + rtrim(@ValList) end
      if (@ColStatus & 0x80) = 0x80 begin set @IdentityInsert = 1 end          -- Check if column has Identity attribute
      fetch next from csrColumns into @ColName, @ColType, @ColStatus
    end
    
    close csrColumns
    deallocate csrColumns
    
    set @ColList = replace(ltrim(@ColList), ' ', ', ')
    set @ValList = replace(ltrim(@ValList), ' ', ', ')
    
    if @IdentityInsert = 1
      print 'set identity_insert ' + @TableName + ' on'
    
    if @DebugMode = 1
      print @SQL1 + @ColList + @SQL2 + @ValList + @SQL3 + ' ' + @WhereClause
    else
      exec (@SQL1 + @ColList + @SQL2 + @ValList + @SQL3 + ' ' + @WhereClause)
    
    if @IdentityInsert = 1
      print 'set identity_insert ' + @TableName + ' off'
    
    0 讨论(0)
  • 2021-01-14 05:31

    Back up the table on the one server, to a file, and restore that file into the empty table on the other one...

    0 讨论(0)
  • 2021-01-14 05:31

    Depending on the amount and frequency of your data transfer. It it's a low volume one time process, you're better off with using T-SQL to directly insert the data. This can be done either through linked servers or OPENQUERY clause.

    If its high volume one time process, use SSIS or BCP utility.

    If its high volume high frequency, use replication.

    0 讨论(0)
  • 2021-01-14 05:32

    I would use Data Transformation Services (aka Integration Services).

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