2013-03-27 36 views
7

Tôi muốn lấy các giá trị từ các bảng cơ sở dữ liệu cũ của tôi đến các bảng cơ sở dữ liệu mới.Chèn dữ liệu từ db vào một db

Cũ cấu trúc db:

Bảng I: Country

  • countryID
  • CountryName

mới cấu trúc db

Bảng II: Countries

  • Id
  • Tên

tôi đã sử dụng các truy vấn chèn sau như thế nào,

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

Nhưng tôi có kết quả như thế nào,

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

như thế.

nhưng tôi cần kết quả như thế nào,

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

Để đạt được điều này, truy vấn là gì? giúp tôi ...

Trả lời

10

Nếu có nhiều dữ liệu để chuyển và nhiều bảng, tôi sẽ đề xuất sử dụng thuật sĩ Nhập/Xuất do SQL Server Management Studio cung cấp.

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

Edit: Tuy nhiên, nếu không có nhiều dữ liệu và hai hệ thống are not connected - và bạn cần phải tạo ra kịch bản để truyền dữ liệu, truy vấn của bạn sẽ trông như thế này:

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

tuyệt vời! nó đang làm việc .. cảm ơn – PoliDev

+0

Wow, tôi chưa bao giờ thử nhập/xuất wizad trước đây. Cảm ơn Mister @NenadZivkovic –

5

Sử dụng đơn giản tuyên bố INSERT (database_name [tên_sơ đồ] .table.)

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

Nếu cả hai cơ sở dữ liệu là trên một máy chủ, bạn có thể chỉ cần làm như thế này:

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

Hy vọng điều này sẽ giúp

3

Thành thật mà nói tôi không thực sự nhận được các truy vấn mà bạn đã viết. Bạn đang cố tạo chuỗi từ các truy vấn của mình, sau đó bạn lại chuyển tới cơ sở dữ liệu của mình?

Bạn chỉ có thể vượt qua giá trị của bạn từ một cơ sở dữ liệu để người kia trong một truy vấn:

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

Hoặc bạn có thể sử dụng một bảng tạm thời và chuyển đổi các kết nối cơ sở dữ liệu sau khi lấy giá trị ban đầu của bạn.

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: như trước đây đã đề cập, để làm việc này bạn cần cả hai cơ sở dữ liệu trên cùng một máy chủ, vì bạn không nói gì về điều đó tôi chỉ giả định là đúng? : D

Các vấn đề liên quan