• ベストアンサー

リンクサーバ(PostgreSQL)に対してのDelete文の発行

SQL2000サーバのデータベースにあるデータをDTSを使用して、PostgreSQLサーバにバッチで転送する仕組みを作っています。 DTSでデータ変換タスク自体はうまくいったのですが、転送する際の前処理としてDELETE文を発行したいのですが、やり方が分からず困っております。 OPENQUERYを使うのかなぁという印象はあるのですが、HELPでの例が、SELECT文のみだったのでご教授頂けないでしょうか よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.2

#1です。 >OPENQUERY(リンクサーバー名, 'SELECT * FROM ポスグレテーブル') > >の場合うまくいきましたが、 > >DELETE FROM >FROM リンクサーバー名...ポスグレテーブル >サーバー : メッセージ 7314、レベル 16、状態 1、行 1 すみません。ちょっと原因はわかりません。 前に、SPが当たってない関係で、同様のエラーが出た記憶がありますが、その時は、テーブル名を大文字にして回避したような。 (かなり、うろ覚えです)

marimo767
質問者

お礼

ありがとうございます 早速確認してみます

その他の回答 (1)

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

DELETE FROM OPENQUERY(リンクサーバー名, 'SELECT * FROM ポスグレテーブル') でもOKなはずですが、普通は DELETE FROM FROM リンクサーバー名...ポスグレテーブル みたいにしますね。

marimo767
質問者

補足

ご回答ありがとうございます DELETE FROM OPENQUERY(リンクサーバー名, 'SELECT * FROM ポスグレテーブル') の場合うまくいきましたが、 DELETE FROM FROM リンクサーバー名...ポスグレテーブル 実際には delete from POSTGRESQL...test_master_user とすると、 サーバー : メッセージ 7314、レベル 16、状態 1、行 1 OLE DB プロバイダ 'POSTGRESQL' はテーブル 'test_master_user' を持っていません。テーブルが存在しないか、現在のユーザーがそのテーブルに権限を持っていません。 OLE DB エラー トレース [Non-interface error: OLE DB provider does not contain the table: ProviderName='POSTGRESQL', TableName='test_master_user']。 というエラーが出てしまいました。OPENQUERYを使用しない実装をしたいと考えていますが、原因について何か分かることがあればご教授頂けないでしょうか。

関連するQ&A

  • SQL Serverのリンクサーバーの

    こんにちは。 現在VisualStudio 2008 ProでC#を用いてWebアプリケーションを作成しようとしています。 いつもは、SQL Serverのデータを扱うのにADO.NETを使用してアプリケーションを作成しています。 Webアプリケーションのデータベース用のPCとしてWindows2003とSQL Server2005 Standardが搭載されているPCにAccess2003で作られているmdbがリンクサーバー設定されているものを用意しております。 このmdbは別のシステムで使用されており、常に更新されています。 今のところ、SQL Serverのタスクを用いて定期的(10分おきとか)にこのリンクサーバー上のmdbの情報を読み取り、SQL Server上に作ったテーブルを更新しているのですが、これだと情報を取りにいった時にタスクの更新が行われるまで、古い情報を取得することになります。 リアルタイムで取得することを考えた場合、 C#で作成したアプリケーションでこのSQL Serverにアクセスした時に直接リンクサーバーに対してSQL文を実行するという方法を考えているのですが、いろいろ検索しましたが探すことが出来ませんでした。 この様な方法がありましたら教えていただけないでしょうか?

  • PostgreSQLサーバのマシン交換

    サーバのマシン交換を行います。 現在のPostgreSQLのデータを新しいマシンに移すにはどうしたらよいでしょうか? データベースについては、初心者なので困っています。 よろしくお願いします。

  • PostgreSQLとMySQL

    データベースの学習のため、 PostgreSQLかMySQLを利用しようと考えていますが、 どちらにするか決め手が無く、悩んでいます。 利用方法はプログラムからSQL文を発行し、 データの取り出し、書き込みを行う程度なので どちらでも特に何も問題は無いと思いますが、 「こっちの方がオススメ!」みたいなものはあるでしょうか?

  • データベースのメンテナンスについて、PostgreSQLとMySQLについて

    MySQLのように show tables;などデータベースの情報をSQLコマンド等で見れるような仕組みは PostgreSQLにあるのでしょうか?

  • VB2005で、Delete文(SQL Server2005 Express)

    VB2005で、Delete文を使ったプログラムを書きたいのですが。 SQL Server2005 ExpressEditonを使っています。 テーブル(WK_BoxList)から 列名(ComputerName)=XXXに該当するレコードを削除する。 そこで下記のコードを書いたのですが、 1,2のSQL文だと問題ようなのですが。 3の時に、列名'SYSTEM'が無効です。とメッセージがでてしまいます。 テーブル(WK_BoxList)には列名'SYSTEM'というのはありません。 3のようにSQL文は、文字連結させて使えたはずだと思ったのですが。 ちなみにプログラム初心者です。アドバイスをいただきたいのですが、 よろしくお願い致します。<(_ _)> Dim scn As SqlClient.SqlConnection = New SqlClient.SqlConnection(接続文字列) Dim scm As SqlClient.SqlCommand Dim sql As String Dim PcName As String = My.Computer.Name Try scn.Open() ' OK 'sql = "delete from WK_BoxList ' OK '------------1 ' OK 'sql = "delete from WK_BoxList Where ComputerName=1 '-------------- 2 ' NG sql = "delete from WK_BoxList Where ComputerName=" & PcName '----------3 scm = New SqlClient.SqlCommand(sql, scn) scm.ExecuteNonQuery() Catch ex As Exception MessageBox.Show(ex.Message) End Try scn.Close() 環境 WindowsXP Pro SP2 VS2005Pro Sp1 SQL Server2005 ExpressEditon

  • 停止したpostgresqlサーバのデータを取出せたい

     linuxマシーンでposgresqlサーバを運用しています。 事情により、OSが起動できなくなりました。  ほかのマシーンでHDDの中のpostgresqlサーバの データ:/var/lib/psql/dataを見えて編集などができ ます。  データベースのデータを取り出したいですが、アドバ イスをよろしくお願いします。

  • 別のサーバーにあるDBに対してSELECTした結果が帰ってこない。

    別のサーバーにあるDBに対してSELECTした結果が帰ってこない。 質問はタイトル通り、別のサーバーにあるDBに対してSELECTした結果が帰ってきません。 あるwebサイトを新しいサーバーに移行する事になりました。 データベースはwebサイトと同じサーバーに準備していたのですが 新しいサーバーに移行する際に別のサーバーに準備する事になりました。 そして新しい環境で動作検証をしていて特に問題なく進んでいたのですが・・・・ 旧環境では特に問題なくSELECTした結果が帰ってきていましたが 新しい環境ではデータ取得の際に件数が多くなるとSELECTした結果が帰ってきませんでした。 SELECTした結果は約7000件~30000件のデータを取得するようになっております。 (新しい環境で1000件近くのデータを取得しようとしたら約5分かかりました。) これはSQL文が悪いのでしょうか、それともphpの設定が悪いのか、postgresqlの設定が 悪いのか特定出来ずに困り果てております。。。 何でも構いませんのでご助言を頂けたら幸いです。 ■環境について □以前の環境 同じサーバー内にphpとpostgresqlがある Postgresqlのバージョンは8.0.3で、phpのバージョンは5.0.5です。 □現在の環境 別のサーバーにphpとpostgresqlがある Postgresqlのバージョンは8.1.18で、phpのバージョンは5.1.6です。 ■データ取得テーブル □テーブル名 テストテーブル □フィールド数 100 (登録時刻フィールドはタイムスタンプ型です) □SQL文例 Select * From テストテーブル Where 登録時刻フィールド >= 'yyyy-mm-dd' AND 登録時刻フィールド <= 'yyyy-mm-dd'

  • DELETE 文とEXISTSの使い方について(Oracle10g)

    DELETE 文とEXISTSの使い方について(Oracle10g) 2つのテーブル(A、B)を外部結合して、B側がNULLとなったレコードを A側から削除する、というDELETE文が作りたいのですが、 EXISTS句を使ってみたもののどうも使い方がわからず苦戦しています。 目的は2つのテーブルを同期させる事で このSQLを実行する時点で、常にA>Bになっています。 目的を達成できるSQLを教えてください。 <削除対象レコードをSELECTするSQL> SELECT * FROM A, B WHERE A.KEY1 = B.KEY1(+) AND A.KEY2 = B.KEY2(+) AND B.KEY1 IS NULL ; <上をDELETE文にしてみたつもりが、削除0件になってしまうSQL> DELETE FROM A WHERE EXISTS( SELECT 1 FROM B WHERE A.KEY1 = B.KEY1(+) AND A.KEY2 = B.KEY2(+) AND B.KEY1 IS NULL ) ;

  • Oracle SQL DELETE文のレスポンス

    いつもお世話になっております。 この度は、手前のSQL文において DELETE文のレスポンスが上がらずに難儀しています。 現在DELETE処理はバッチにて行っています。 最初にSELECTにて抽出を行ったものをバックアップにとり、 次は同様の条件でDELETE文で処理しています。 この際に、SELECTでは1秒程度で済んだ処理が、 DELETE文ではレスポンスが返ってこないという状況です。 何がまずいのか、どう工夫すればいいのか 色々変えてみましたがレスポンスは改善されません。 SQLと条件は以下です。 【SQL文】 SELECT 複数の項目 FROM TABLEA A WHERE NOT Exists(SELECT 'X' FROM TABLEB B WHERE A.ITEMNO = B.ITEMNO) AND NOT Exists(SELECT 'X' FROM TABLEC C WHERE A.ITEMNO = C.ITEMNO AND to_char(LAST_DAY(ADD_MONTHS(SYSDATE,-4)),'YYYYMMDD') < C.REPYMD) AND NOT Exists (SELECT 'X' FROM TABLEA2 A2 WHERE A.ITEMNO = A2.ITEMNO AND to_char(LAST_DAY(ADD_MONTHS(SYSDATE,-4)),'YYYYMMDD') < to_char(A2.CREATEDATE,'YYYYMMDD')) AND NOT Exists(SELECT 'X' FROM TABLEC C WHERE A.ITEMNO != C.ITEMNO AND to_char(LAST_DAY(ADD_MONTHS(SYSDATE,-4)),'YYYYMMDD') < to_char(A.CREATEDATE,'YYYYMMDD')) 上記のSELECT文の後に処理されるDELETE文は 「SELECT 複数の項目 FROM TABLEA A」 ⇒ DELETE FROM TABLEA A としたもので、 条件は全てSELECT文と同様のものを使用しています。 ◆条件を言葉で明記すると以下のようになります。 1.Bテーブルに存在するものは削除対象外とする 2.AテーブルのアイテムIDとCテーブルのアイテムIDは一致する。   AテーブルのCREATEDATEとCテーブルのREPYMDのいずれかが3ヶ月以内のアイテムは   削除対象外とする 3.AテーブルもしくはCテーブルにしか存在しない場合は、各日付が3ヶ月以内のアイテムは   削除対象外とする 以上のようになっています。 どなたかアドバイスをいただければ幸いです。 宜しくお願い致します。

  • postgreSQLでテーブルの一覧

    他人が管理していたUNIXマシンのデータベースがあります。 postgreSQLです。 さて、SQLコマンドで、SELECTとかINSERTとかはわかった(というか 教わった)のですが・・・・ テーブルが複数あるようなので、そのテーブルの一覧というか、 すべてのテーブルの名称を見るにはどうしたらよいのでしょうか?