SQLServer2000でのデータ更新時の単位ロックとNULL値の取得方法について

このQ&Aのポイント
  • VB6.0からSQLServer 2000に接続する際、データ更新時にデータ単位でロックをかける方法を知りたいです。
  • INSERT/UPDATE/DELETE文でデータロックを実現する方法が分からないです。SELECT文では【WITH~】を使いますが、他の文ではどのようにすれば良いでしょうか?
  • また、NULL値のある項目をSELECTする際に、NULL以外の値で取得する方法はありますか?Oracleでは可能だったと思いますが、SQLServer 2000でも同様にできるでしょうか?
回答を見る
  • ベストアンサー

SQLServer2000で。

こんにちは。早速質問させて頂きます。 VB6.0からSQLServer 2000に、ADOで接続を行っています。 デ-タ更新時に、デ-タ単位でロックをかけたいのですが、どのように記述すればよいのか分かりません。 SELECT文だと、テ-ブル名の後ろに【WITH~】と記述するというのは分かったのですが、INSERT/UPDATE/DELETEの際はどのようにすればいいのでしょうか? もう一つ。 デ-タSELECT時に、項目にNULL値が入っていた場合、NULL以外の値で取得する方法はありますか?(Oracleにはあったような…) どなたか知識のある方、教えて下さい。 よろしくお願いします。

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

  • ベストアンサー
  • lucky-jam
  • ベストアンサー率16% (3/18)
回答No.1

自信はないのですが回答させていただきます。 INSERT/DELETE文には行単位のロックは必要ですか? というよりこれからINSERTする行に対しては既存の何をロックするのでしょうか。DELETE文も削除するデータをロックするのでしょうか? UPDATEは特に意識せずにSQLServerで行ロックを行なっていると思います。同時に更新に行った場合に後から更新しようとしているデータには待ちが発生すると思います。 SELECT時のNULL以外で表示するのは ISNULL("対象のカラム","表示する値") だったと思います。 "対象のカラム"がNULLの場合に"表示する値"になります。

saruru
質問者

お礼

早いお答えありがとうございました。 言われてみれば確かにINSERT/DELETEの際には必要ないですね(汗) ロックに関しては何も気にせずにやってみようと思います~。 ISNULLも早速使用してみます。ありがとうございました。

関連するQ&A

  • SQLServerでの副問合せについて

    いつもお世話になります。 当方SQLServerをあまり使った事がなくSQLの組み方で少々てこずっております。そこでちょっとお知恵をお借りしたく質問致しました。 処理内容としましては、ある条件でテーブル内のデータを削除するって事なんですが、オラクルで記述するなら DELETE FROM AAAA WHERE (あああ,いいい) IN (SELECT あああ,いいい FROM BBBB GROUP BY あああ,いいい)  となるのですが、この構文をSQLServerで記述すると構文エラーとなってしまいます。 まあこの構文が実際には使えて私の記述がおかしいだけのかもしれないのですが、もし使えないのであればどのように記述すればよいのでしょうか? 申し訳ありませんが、宜しくお願いします。 ちなみにSQLServerは2000を使用しております。

  • SQLServerでのロックについて

    SQLServerであるテーブルを行ロックしています。 (select * from テーブルA with (UPDLOCK) where KEYCD = 1) 行ロック実行時に、他のマシンが既にロックしていた場合、それをエラーとして返す方法はありますでしょうか? (Oracleでいう"nowait"のようなもの) 最近SQLServerをやりはじめたばかりの超初心者です。 よろしくお願いします(T_T)

  • VB6でSQLServerへADO接続するとOPENがすごく遅いんです。

    お世話になってます。 今、VB6.0で作成したシステム(ADOでACCESS2000に接続)をSQLServerに移行しています。 しかしDBの初回OPEN時に5秒くらいかかってしまいます。 原因を探しているのですが、どうしても見つかりません。 誰かご存知の方がいらっしゃいましたら、ご教示お願いします。 開発環境は以下の通りです。 OS:WindowsXP SP2 開発言語:VB6.0 SP5 データベース:SQLServer2005 ADO:ADO2.5

  • ACCESS2010でSQLsever2012

    いつもお世話になります。ACCESSはあまり知識が無いので皆様の知恵を借りたいと思いまして質問させて頂きますが何分理解不足の点が多く変な文章になっておりましたら補足させて頂きますので宜しくお願い致します。 私が勤めている会社のデ-タの話になります。基幹業務はVB.net 2005で作成して頂いております。デ-タベ-スはSQLserver2012の無料版になります。 売上デ-タや仕入デ-タ等の過去分を訂正したいと思っておりますがODBCにて 接続が出来ましてインポ-トは可能なのですがインポ-トしたテ-ブルのデ-タ をクエリで訂正したとします。 そのテ-ブルを実デ-タに上書きするにはどうすれば良いのでしょうか? 単にエクスポ-トしたら良いのでしょうか?いろいろと調べてみましたが 要領を得る事が出来ずにおります。何卒宜しくお願い致します。

  • 【SQLServer】何も処理しない場合の記述について

    【SQLServer】何も処理しない場合の記述について お世話になってます。 ご存知の方いらっしゃいましたら教えてください。 Oracleでは、IF文の中で何も処理したくない場合、明示的にNULLと書けば、コンパイルできます。 IF XXXXX THEN A = 100 ELSE -- 何もしない NULL END たとえ何も処理しない場合でも、明示的にELSE句を 書きたい場合は、 SQLServerの場合、何をかけばよいのでしょうか? 今のところ下記のように、ELSEの場合は意味の無い処理を記述しています。 IF XXX BEGIN A=100 END ELSE IF BEGIN -- 何も処理しない A = A END A=Aは意味の無い処理なのですが、削除するとコンパイルが通らなくなってしまうのでやむなく記述してます。 どなたかいいアイデアありましたらご教授くださいませ。 よろしくおねがいします。

  • VB6.0でSQLServerへ・・・RecordSet生成タイムアウト・・・

    VB6.0でSQLServer2000へADOで接続して、RecordSetに結果を入れる際に「時間切れ」になってしまいます。コネクションはちゃんとできていて(connection.stateは1)で、 RecordSet.open(SQL文,connection,adOpenForwardOnly,adLockReadOnly)でしばらく待った後「Err.description」で時間切れと言われてしまいます。connection.ConnectionTimeout = 200にしてても時間切れです・・・(涙) でで、SQLServerのlocalhost端末のAccessからSQLServerにリンクをはって同様のSQL文(普通のSelect文です、Joinも副問い合わせとかもしてないです。)をクエリで実行したところ、結果が返ってくるまで15分くらいかかりました。抽出条件にIndexを張ってないため・・・(事情があってIndexはれないです)こういう場合、どのようにしてVBでRecordSetを取得すればいいのでしょうか?ConnectiontimeoutはrecordSet取得時にも有効ですか?そうだとしたら、connectiontimeoutは好きなだけ大きい値を設定してみてよいのでしょうか?

  • SQLServer7.0で、SELECT文で列を抽出する ※Nullと0の条件について

    SQLServer7.0で、SELECT文で列を抽出する際なんですが、 列A 列B --------- 1  Null 2  Null 3  1 ↑のテーブルから、列Aの1、2だけを抽出するSELECT文を SELECT * FROM XXX WHERE 列B <> 1 と作成したのですが、うまく動作しません(汗) データが一件も取れないのです。(列B:tinyint型、Null許容) テーブル内のデータをNull→0にして、同SELECT文で抽出すればうまくいったのですが。。 Nullデータを、<>XX という条件で取得することはできないんですかねえ・・・。 それとも、テーブルの設定か、条件の記述方法がまずいんでしょうか。 どなたか、ご存知あればアドバイスをお願いします。

  • 得意分野にこだわるべきか

     現在転職活動中の者です。  私はVB.NETとSQLServerでの開発経験が長く、今後も.NET+SQLServerの スキルを伸ばして行きたいと思ってるのですが、求人をみるとDBはSQLServer よりOracleの求人の方が圧倒的に多い状況です。 .NETはVBにこだわらず今後はC#やASP.NETの案件も受けていきたいのです が、DBは設計やチューニングを含め、SQLServerでやっていきたいんですけど、 このようなこだわり(わがまま?)を持っていたら仕事がなくなるでしょうか?  また、ざっくばらんで結構なのですが、DBのシェアは世間ではほぼOracleが 一般的で、SQLServerや他のDBはマイナーであまり使われていないのでしょうか?  サーバもクライアントもWindowsのOSなら、SQLServerで充分だと思うのですが・・・。 Oracleより安いし、新しいWindowsとも相性がいいし(ロックエスカレーションには 悩まされますが・・・)。

  • DAOとADO

    DAOとADOの違い・メリットなど具体的にご説明願えませんか? よろしくお願いします。 VB6でSQLServerに接続する時にこの問題にぶち当たりました。

  • Access or SQLServer どちらを使用しますか?

    こんにちは。 みなさんならAccessかSQLServerの、どちらのDBを使うかご意見ください(出来ればメリットやデメリットなどもあるとうれしいです) <環境> サーバー:Win2000Server、Access2000または、SQLServer7.0 クライアント:Win2000 ×10台 開発環境:VB6.0(SP5)、Win2000 <やりたいこと&悩み> 1)複数のパソコンからDBのデータをSelect、Insert、Update、Deleteする 2)データが多いので、Accessの場合は3つくらいのmdbに分けないといけない(Accessのサイズ上限を超えてしまう為)。分けた場合は、リンクテーブルが必要。データ数は、1ヶ月に3万件くらい 3)タイミングによっては、同時アクセスあり 4)AccessをDBとして試作品を作成したところ、ファイルをロックできませんでしたというエラーが1日1回程度でてしまう 5)SQLServerでは気軽(?)にユーザーがメンテナンスできない(Accessの知識は多少あり) このような感じですが、みなさんならどちらを選択されますか?ご意見よろしくお願いします。