質問

私は T-SQL と SQL 2005 についてはまだ初心者です。整数の列をデータベース 1 のテーブルからデータベース 2 の同一のテーブル (必要な列だけが欠けている) にインポートする必要があります。どちらも SQL 2005 データベースです。Server Management Studio の組み込みインポート コマンドを試しましたが、テーブル全体をコピーする必要がありました。これにより、制約と「読み取り専用」列 (sql2005 での「読み取り専用」の意味) が原因でエラーが発生します。単一の列を取得してテーブルにコピーしたいだけです。

これを行う簡単な方法があるはずです。何かのようなもの:

INSERT INTO database1.myTable columnINeed
SELECT columnINeed from database2.myTable
役に立ちましたか?

解決

テーブルの最後に新しい行を挿入しようとするため、挿入では実行されません。あなたがやろうとしているのは、既存の行の末尾に列を追加することです。

構文が正確に正しいかどうかはわかりませんが、理解できれば、これで目的のことが実行されます。

  1. データベース2にNULLを許可する列を作成します。

  2. 更新を実行します。

    Database2.dbo.tablenameの更新データベース2.dbo.tablename.colname = database1.dbo.tablename.colname from database2.dbo.tablename inenter niner join database1.dbo.tablename on database2.dbo.tablename.keycol = database1.dbo.tablename。 keycol

他のヒント

両方のデータベースが同じサーバー上にある限り、これとよく似た簡単な方法があります。完全に資格のある名前はdbname.owner.table-通常、所有者はDBOであり、「.dbo」のショートカットがあります。これは「..」です。

INSERT INTO Datbase1..MyTable
    (ColumnList)
SELECT FieldsIWant
  FROM Database2..MyTable

列が存在しない場合は、まず列を作成します。

ALTER TABLE database2..targetTable
ADD targetColumn int null -- or whatever column definition is needed

SQL Server 2005 を使用しているため、新しい マージ 声明。マージ ステートメントには、すべての状況を 1 つのステートメントで処理できるという利点があります。 ソースからの欠落行(挿入が可能)、宛先からの欠落行(削除が可能)、一致する行(更新が可能)など、すべてが 1 つのトランザクションでアトミックに実行されます。例:

MERGE database2..targetTable AS t
USING (SELECT sourceColumn FROM sourceDatabase1..sourceTable) as s
ON t.PrimaryKeyCol = s.PrimaryKeyCol -- or whatever the match should be bassed on
WHEN MATCHED THEN 
    UPDATE SET t.targetColumn = s.sourceColumn
WHEN NOT MATCHED THEN
    INSERT (targetColumn, [other columns ...]) VALUES (s.sourceColumn, [other values ..])

MERGE ステートメントは、あなたのようなケースを解決するために導入されたものであり、これを使用することをお勧めします。基本的に MERGE が行うことと同じことを複雑さを増すことなく 1 つのステートメントで実行できる、複数の SQL バッチ ステートメントを使用するソリューションよりもはるかに強力です。

カーソルを使用することもできます。最初のテーブルのすべてのレコードを反復処理し、2 番目のテーブルに新しい行を追加したい場合は、次のような方法になります。

DECLARE @FirstField nvarchar(100)

DECLARE ACursor CURSOR FOR
SELECT FirstField FROM FirstTable 

OPEN ACursor
FETCH NEXT FROM ACursor INTO @FirstField
WHILE @@FETCH_STATUS = 0
BEGIN

   INSERT INTO SecondTable ( SecondField ) VALUES ( @FirstField )

   FETCH NEXT FROM ACursor INTO @FirstField

END

CLOSE ACursor   
DEALLOCATE ACursor

MERGE は SQL 2008 でのみ使用でき、SQL 2005 では使用できません。

Test2.dbo.MyTable (MyValue) に挿入 Test1.dbo.MyTable から MyValue を選択

これはかなりのことを想定しています。まず、宛先データベースが空であること。次に、他の列は NULL 可能です。代わりにアップデートが必要になる場合があります。これを行うには、共通キーが必要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top