0

これはユニークなことではないことは知っていますが、検索や読書で自分が考えていることを実行する方法が見つからないようです。それが不可能な場合は、私が最良の選択肢を選んでいます。

人々に関する情報を古いデータベースから新しいデータベースに移動する単純なケース。問題は、古いスキーマの各行にアドレスがあり、それを新しいスキーマの独自のアドレステーブルに分割していることです。

私がやりたいのは次のようなものです。

INSERT INTO [newDB].[dbo].[Persons] ([FirstName], [LastName], [AddressId], [SSN])
SELECT
    p.[Firstname],
    p.[Lastname],
    AddressId =
    (
        -- The result of inserting the address into the
        -- table or the existing address' ID
    ),
    p.[SSN]
FROM [oldDB].[dbo].[tblPersons] p

見つけられないことを行う方法はありますか、それとも最初にアドレスを取得してから一致させる必要がありますか、それとも完全に欠落しているものですか?助けていただければ幸いです。他の人のデータを転送するために私が取り組む必要があったのはこれが初めてであり、私の不当な楽観主義はこれ以上長くは続かないでしょう。;)

4

4 に答える 4

4

あなたが探しているのはSELECTINTOのようです

于 2009-12-02T06:18:30.827 に答える
1

データを移動するためにテーブル変数を使用して何かを試してみます

DECLARE @OldTable TABLE(
        PersonID INT,
        FirstName VARCHAR(50),
        LastName VARCHAR(50),
        Address1 VARCHAR(50),
        Address2 VARCHAR(50)
)

INSERT INTO @OldTable (PersonID,FirstName,LastName,Address1,Address2) SELECT 1, 'A', 'B', 'C', 'D'

SELECT  *
FROM    @OldTable

DECLARE @Persons TABLE(
        PersonID INT,
        FirstName VARCHAR(50),
        LastName VARCHAR(50),
        AddressID INT
)

DECLARE @Addresses TABLE(
        AddressID INT,
        Address1 VARCHAR(50),
        Address2 VARCHAR(50)
)

DECLARE @TempTable TABLE(
        PersonID INT,
        AddressID INT IDENTITY(1,1),
        Address1 VARCHAR(50),
        Address2 VARCHAR(50)
)

INSERT INTO @TempTable (PersonID,Address1,Address2) SELECT PersonID,Address1,Address2 FROM @OldTable

INSERT INTO @Addresses (AddressID,Address1,Address2)
SELECT  AddressID,
        Address1,
        Address2
FROM    @TempTable

INSERT INTO @Persons (PersonID,FirstName,LastName,AddressID)
SELECT  ot.PersonID,
        ot.FirstName,
        ot.LastName,
        t.AddressID
FROM    @OldTable ot INNER JOIN
        @TempTable t ON ot.PersonID = t.PersonID

SELECT  *
FROM    @Persons

SELECT  *
FROM    @Addresses
于 2009-12-02T06:30:24.363 に答える
1

次のようなカーソルを使用することもできます。

DECLARE @AddressID INT
DECLARE @Address VARCHAR(50)
DECLARE @FirstName VARCHAR(50)
DECLARE @LastName VARCHAR(50)

DECLARE cur CURSOR FOR 
SELECT FirstName, LastName, Address
FROM olddb.dbo.tblPersons

OPEN cur
FETCH NEXT FROM cur INTO @FirstName, @LastName, @Address

WHILE @@FETCH_STATUS = 0
BEGIN
    INSERT INTO newdb.dbo.Address(Address)
    VALUES(@Address)

    SET @AddressID = @@IDENTITY

    INSERT INTO newdb.dbo.Persions(FirstName, LastName, AddressID)
    VALUES(@FirstName, @LastName, @AddressID)

    FETCH NEXT FROM cur INTO @FirstName, @LastName, @Address
END
CLOSE cur
DEALLOCATE cur
于 2009-12-02T23:44:31.617 に答える
0

はい、最初に & でアドレスを取得してから、個人レコードを挿入するときに ID を割り当てるために一致させる必要があります。

つまり、サブクエリで挿入を行うことはできません。

于 2009-12-02T06:25:47.443 に答える