3

あるテーブルから切り捨てられた別のサーバーの同じテーブルにデータを転送する必要があります。これを行う最も簡単な方法は何ですか?

4

6 に答える 6

5

リンクサーバーをセットアップしてから、宛先データベースで以下を使用します。

INSERT INTO existingTable (col1,col2..)

SELECT col1,col2...
FROM linkedserver.dbo.database.othertable
于 2008-12-20T08:20:14.400 に答える
2

一方のサーバーのテーブルをファイルにバックアップし、そのファイルをもう一方のサーバーの空のテーブルに復元します...

于 2008-12-20T17:06:16.567 に答える
2

SQL Server インポートおよびエクスポート ウィザードを使用します。これはおそらく、このタスクを達成するための最も簡単な方法です。

より高度なデータ転送については、bcputility、BULK INSERTstatement、およびOPENDATASOURCE.

于 2008-12-20T07:30:38.820 に答える
0

これは私がこれに使用するのが好きなスクリプトです。使いやすく、ほとんどバグがありません。以下のテキストをクエリウィンドウにコピーし、指示に従ってください。それを実行すると、他のサーバーで実行できる一連の挿入ステートメントが作成されます。


/*
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'
于 2012-03-08T04:43:29.943 に答える
0

Data Transformation Services (別名 Integration Services) を使用します。

于 2008-12-20T07:32:26.740 に答える
0

データ転送の量と頻度によって異なります。これは少量の 1 回限りのプロセスであるため、T-SQL を使用してデータを直接挿入する方が適切です。これは、リンク サーバーまたは OPENQUERY 句を使用して実行できます。

大量の 1 回限りのプロセスの場合は、SSIS または BCP ユーティリティを使用します。

大量の頻度が高い場合は、レプリケーションを使用します。

于 2009-07-02T09:42:08.620 に答える