Передача данных SQL

Мне нужно перенести данные из одной таблицы в ту же таблицу на другом сервере, которая была усечена. Как это сделать проще всего?

Вы просто дублируете все записи, включая PK? Пожалуйста, опубликуйте схему - это повлияет на то, какую технику использовать.

dkretz 20.12.2008 10:27
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
3
1
2 793
6

Ответы 6

Воспользуйтесь мастером импорта и экспорта SQL Server. Вероятно, это самый простой способ выполнить эту задачу.

Для более продвинутой передачи данных рассмотрите возможность использования утилиты bcp, оператора BULK INSERT и OPENDATASOURCE.

Имейте в виду, что мастер импорта / экспорта серьезно поврежден (по крайней мере, в SQLServer 2005). Нам пришлось прекратить его использовать, потому что он не поддерживал отношения внешнего ключа с автоматически созданными ключами.

cletus 20.12.2008 11:39

Я бы использовал службы преобразования данных (также известные как службы интеграции).

Путь перебор. Он должен изучить целый другой программный пакет для загрузки файла?

dkretz 20.12.2008 10:37

DTS полностью прост в использовании - он также поставляется с SQL-сервером, так что это не совсем другой программный пакет.

1800 INFORMATION 20.12.2008 10:44

Установите связанные серверы, а затем используйте следующее в целевой базе данных:

INSERT INTO existingTable (col1,col2..)

SELECT col1,col2...
FROM linkedserver.dbo.database.othertable

Также не забудьте рассмотреть столбцы идентификаторов, затем установите IDENTITY_INSERT ON и OFF. Также проверьте DBCC RESEED, поскольку вы, возможно, не используете IDENTITY (1,1). Вы смогли выполнить усечение, поэтому внешних ключей быть не должно, но могут быть ограничения - проверьте и работайте с ними соответствующим образом.

Meff 21.12.2008 15:48

Создайте резервную копию таблицы на одном сервере в файл и восстановите этот файл в пустую таблицу на другом ...

это лучший ответ. также, более конкретно, используйте сценарий "generate sql" для экспорта данных таблицы в файл с разделителями-запятыми.

djangofan 25.07.2009 00:31

В зависимости от объема и частоты передачи ваших данных. Если это однократный процесс небольшого объема, вам лучше использовать T-SQL для прямой вставки данных. Это можно сделать либо с помощью связанных серверов, либо с помощью предложения OPENQUERY.

Если это большой объем одноразового процесса, используйте служебную программу SSIS или BCP.

Если его большой объем высокая частота, используйте репликацию.

Это сценарий, который мне нравится использовать для этого. Проста в использовании и практически не содержит ошибок. Просто скопируйте приведенный ниже текст в окно запроса и следуйте инструкциям. После того, как вы запустите его, у вас будет набор операторов вставки, которые вы можете запустить на другом сервере.


/*
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'

Другие вопросы по теме