Вставка данных из БД в другую БД

Я хочу взять значения из моих старых таблиц базы данных в новые таблицы базы данных.

старая структура БД:

Таблица I: Country

  • CountryId
  • CountryName

новая структура БД

таблица II: Countries

  • Id
  • имя

я использовал следующий запрос вставки, например,

select 'insert into Countries (Id, Name) select ', countryid, countryname from Country

но у меня есть результат как,

  • insert into Countries(Id,Name) select 1 India
  • insert into Countries(Id,Name) select 2 Any Country

подобное.

но мне нужен результат как

insert into Countries (Id, Name) values (1, 'India')

для достижения этого, что такое запрос? Помоги мне...

4 ответов


Если есть много данных для передачи и несколько таблиц, я бы предложил использовать мастер импорта/экспорта, предоставляемый SQL Server Management Studio.

http://www.mssqltips.com/sqlservertutorial/203/simple-way-to-import-data-into-sql-server/

изменить: Однако, если данных не так много и две системы не подключены - и вам нужно создать скрипт для передачи данных, ваш запрос должен выглядеть так:

SELECT 'INSERT INTO Countries (Id, Name) VALUES (' + CAST(countryid AS VARCHAR(50)) + ', ''' + countryname + ''')' from Country

используйте простой оператор INSERT (database_name.[имя схемы.]таблица)

INSERT [NewDB].[your_schema].[Countries](Id,Name)
SELECT CountryId, CountryName
FROM [OldDB].[your_schema].[Country]

если обе базы данных находятся на одном сервере, вы можете просто сделать вот так:

insert into [db1name].[dbo].[Countries] (Id, Name)
select CountryId, CountryName
from [db2name].[dbo].[Countries]
where _your where clause_

надеюсь, что это помогает


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

Вы можете просто передать значения из одной базы данных в другую в один запрос:

/*
    maybe you need to switch off identity on your target table
    to get your original id values into the target table like this:
    (without comment ofc ;))
*/
--SET IDENTITY_INSERT TargetDatabase.dbo.Countries ON

INSERT INTO TargetDatabase.dbo.Countries (Id, Name)
    SELECT
            CountryId, CountryName
        FROM SourceDatabase.dbo.Country

--SET IDENTITY_INSERT TargetDatabase.dbo.Countries OFF

или вы можете использовать временную таблицу и переключить соединение с базой данных после получения исходных значений.

USE SourceDatabase

DECLARE @TempTable TABLE (CountryId INT PRIMARY KEY, CountryName NVARCHAR(MAX))

INSERT INTO @TempTable (CountryId, CountryName)
    SELECT
            CountryId, CountryName
        FROM Country

USE TargetDatabase

/*
    maybe you need to switch off identity on your target table
    to get your original id values into the target table like this:
    (without comment ofc ;))
*/
--SET IDENTITY_INSERT Countries ON

INSERT INTO Countries (Id, Name)
    SELECT
            CountryId, CountryName
        FROM @TempTable

--SET IDENTITY_INSERT Countries OFF

EDIT: как упоминалось в предыдущем плакате, для этого вам нужны обе базы данных тот же сервер, так как вы ничего не сказали об этом, я просто предположил, что это так? : D