2

MSAccessで実行されるアプリケーションがありますが、バックエンドデータベースとしてSQLServerを利用しています。これにより、アクセスできるビューを確認するクエリが生成されます。通常のユーザーの場合、これには最大18秒かかります。db_ownerロールのメンバーであるすべてのユーザーの場合、0.2秒かかります。通常のユーザー向けにこれを調整する方法はありますか?たぶん私がAccessでできることはありますか?私は彼らにdb_ownerを与えたくありません、そしてAccessを使わないようにアプリケーションを書き直すことは問題外です。

クエリは次のとおりです。

select 
  object_name(id), 
  user_name(uid), type, 
  ObjectProperty(id, N'IsMSShipped'), 
  ObjectProperty(id, N'IsSchemaBound') 
    from sysobjects 
    where type = N'V' 
      and permissions(id) & 4096 <> 0

MS Access 2003、SQL Server2008R2を使用

4

3 に答える 3

0

問題の根本的な原因を突き止めることはできませんが、回避策が役立つ可能性がありますか? アイデア: SQL ステートメントを db_owner が所有する proc にカプセル化し、 EXECUTE AS句を与えることができます。そうすれば、非 db_owner が proc を呼び出したときに、proc の SQL が db_owner の偽装の下で、proc の期間とスコープだけで実行されます。うまくいけば、非 db_owner ユーザーは、db_owner がその SQL を実行したときに見られるパフォーマンスから恩恵を受けるでしょう。

于 2012-04-15T05:07:02.077 に答える
0

パーティーに少し遅れましたが、これを試してください:

select
  [name], 
  schema_name(schema_id), 
  [type], 
  Is_MS_Shipped,
  Is_Schema_published
from 
    sys.all_views
where 
    not permissions(object_id) & 4096 = 0

ビュー固有のオブジェクトを使用して比較を反転すると、わずかな改善が得られる場合があります

于 2014-09-26T14:11:09.627 に答える
0

推測してみましょう: 起動時にこれを行う Access-ADP アプリケーションがあります。私たちはまったく同じでした。このクエリは、Access が後で使用するメタデータを取得するために使用されます。この問題の根本的な原因は、非推奨の PERMISSIONS 関数です。

http://msdn.microsoft.com/en-us/library/ms186915.aspx

引用: 「PERMISSIONS 関数を継続して使用すると、パフォーマンスが低下する可能性があります。」

クエリも関数も変更できないため、運が悪いです。

Access 2013 では ADP サポートが取り消されたため、テーブルがリンクされた ACCDB への移行を検討することをお勧めします。

于 2014-09-26T14:30:32.743 に答える