Вставка данных из БД в другую БД
Я хочу взять значения из моих старых таблиц базы данных в новые таблицы базы данных.
старая структура БД:
Таблица 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