• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:sql serverロックしてしまう)

SQL Serverのロック問題と解決方法

このQ&Aのポイント
  • SQL Serverでのタイムカード(打刻)システムにおいて、朝と夕方の打刻が重なるときにロック(クエリーのタイムアウト)が発生する問題があります。この問題を解決するための修正方法として、トランザクションをやめて参照時にNOLOCKを使用する方法があります。
  • 具体的には、社員マスタを更新する処理ではトランザクションを使用しており、この処理中に社員マスタ全体がロックされるため、他のプロセスからの同時アクセスが制限されます。一方、社員コードで指定したレコードのみを参照する処理では、NOLOCKを使用することでロックを回避できます。
  • ただし、トランザクションをやめることにより、データの整合性に関するリスクが生じます。そのため、トランザクションの必要性やデータの一貫性を考慮した上で、修正方法を選択する必要があります。また、他の影響も考慮する必要があります。

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

  • ベストアンサー
  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.1

このソースだとおそらくリンクテーブルを使っているのだと思います。リンクテーブルは読み込みの制御が出来ません。つまりAccessからNOLOCKなどを出してもSQLサーバーには届かないということです。リンクテーブルは近所のデーターを一緒に持ってきてAccessの中でクエリを掛けるので全員が同じことをすればロックは掛かります。 回避策はSet cn = CurrentProject.ConnectionをADOの接続に変更してTransactSQLで書き直すことです。 Dim CN As ADODB.Connection Set CN = New ADODB.Connection CN.Provider = "SQLOLEDB" CN.ConnectionString = "Persist Security Info=true;" & _ "Data Source=サーバー名;" & _ "Initial Catalog=XXDB;" & _ "User ID=XXXX;" & _ "Password=1234" CN.Open ’ この場合SQLの認証をドメインにしたほうが良いですけど、アプリケーションユーザーIDを作ってSQL認証でも構いません。推奨はされていませんが。

関連するQ&A