2

perl 5.10 アクセス 2010 SqlServer 2008 R2

したがって、テーブル A の列をテーブル B のデータで更新する必要があります。ここで、A と B には結合できる列があります。

これはうまくいくでしょう

$sqlCmd = "UPDATE aa SET aa.foo = bb.fancyfoo " .
          "FROM [dbo.serverOne] AS aa " .
          "RIGHT JOIN [noteTable] AS bb " .
          "ON aa.[recid] = bb.[recid] " ;
$sth = $dbh->prepare( $sqlCmd);

有効なデータベース ハンドルが 1 つしかないため、両方のテーブルが同じデータベース内にある場合。しかし、私のテーブルは別のデータベースに存在し、実際には別のサーバーに存在します。dbo.ServerOne は SqlServer のインスタンスに存在し、noteTable は Access データベースに存在します (申し訳ありません)。

さらにスパイスを加えるために、bb.fancyfoo は MEMO として定義され、aa.foo は nvarchar(max) として定義されます。

率直に言って、これが 1 回のパスでどのように達成されるかわかりません。SQL コマンドで複数の db ハンドルを使用できますか? そうでない場合、dbo.ServerOne での UPDATE と noteTable での SELECT という 2 つの別個のコマンドを使用する必要があります。MEMO/nvarchar(max) フィールドで機能するように設定するにはどうすればよいですか? つまり、テーブル間にデータを保存するにはどうすればよいですか? CLOB?

ティア、

まだまだ勉強中のスティーブ

4

2 に答える 2

1

運が良ければ、両方のテーブルを同じデータベースに置くことができます。

グーグルで検索する必要があるのは、「リンクされたテーブル」です。ここに簡単な概要がありますが、基本的には ODBC (または他のサポートされている接続方法) を介して外部テーブルを追加できます。

Access テーブルを SQL Server DB にリンクすることも、その逆も可能です。Access ファイルが固定の場所にあるかどうか、およびデータの大部分がどこにあるかによって異なります。大きいものから小さいものにリンクする方がおそらく効率的です。

そうは言っても、SQL Serverはクエリの計画/実行についてより賢くなると思うので、最初にそれを試してみます。

于 2013-08-16T07:00:02.660 に答える
0

既に Access テーブルから SqlServer テーブルにデータを取り込んでいるので、両方のテーブルのフィールドを共有キー フィールドをキーとする hashref に追加して JOIN を実行することにしました。私が望むほどエレガントではありませんが、うまくいきます。

返信してくれたすべての人に感謝します!

ケースクローズ

まだまだ勉強中のスティーブ

于 2013-08-21T00:20:31.370 に答える