web-dev-qa-db-ja.com

データベースから別のデータベースにデータを挿入します

古いデータベーステーブルから新しいデータベーステーブルに値を取得したいと思います。

古いdb構造:

表I:Country

  • CountryId
  • 国名

新しいデータベース構造

表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')
_

これを達成するために、クエリは何ですか?助けて...

7
PoliDev

転送するデータが多く、複数のテーブルがある場合は、SQL Server ManagementStudioが提供するインポート/エクスポートウィザードを使用することをお勧めします。

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

編集:ただし、データが多くなく、2つのシステムが接続されていない場合、データを転送するためのスクリプトを生成する必要がある場合、クエリは次のようになります。

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

単純なINSERTステートメントを使用します(database_name。[schema_name] .table)

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

両方のデータベースが1つのサーバー上にある場合は、次のようにすることができます。

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

お役に立てれば

4
serejja

正直なところ、あなたが書いたクエリは実際には得られません。クエリから文字列を作成し、それをデータベースに再度渡そうとしていますか?

1つのクエリで1つのデータベースから別のデータベースに値を渡すことができます。

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

編集:前のポスターが述べたように、これが機能するためには、同じサーバー上に両方のデータベースが必要です。あなたはそれについて何も言わなかったので、私はそれが事実だと思っていましたか? :D

3
DrCopyPaste