0

この foxpro から sql サーバーへの移行要件を支援してください。

作業領域でテーブルが開いているかどうかを判断する foxpro のこの関数 USED() があります。同じ仕事をするSQL Serverにそのような機能はありますか?

4

2 に答える 2

1

私は何年も前にFoxproからSQLに移行しました。SQL Serverでの動作の概要:

  • SQL Serverでは、テーブル(およびインデックス、ビュー、ストアドプロシージャ、その他の負荷)がデータベース内で定義/作成されます。
  • テーブル全体が単一のデータベースに保存されます。データベースには、大量のテーブル(およびその他のもの)を含めることができます。
  • データベースのすべての内容はファイル内に保存されます。ファイルはデータベース間で共有されません。データベースごとに少なくとも2つのファイル、1つのデータと1つのログがあります。(複雑になる可能性があります。)
  • データベースが「開いている」場合、そのすべてのコンテンツ(すべてのテーブル、ビューなど)を使用できます。WordやExcelのように考えてください。ファイルが開いている場合は、ファイルを操作できます(ファイルはロックされており、OSやその他のアプリから変更することはできません)。ファイルが閉じている場合、コンテンツにアクセスできず、ファイルを削除または名前変更できます。SQLでは、データベースを常に開いている方がはるかに効率的です。
  • SQLには、多くのアクセスと権限の制御があります。データベースが開いていて使用できるからといって、誰でもデータベースにアクセスできるわけではありません。ログインにより、SQLへの接続を開くことができます。ユーザーはログイン用にデータベース内で定義され、特定のログインがアクセスできるデータベース内のオブジェクト(テーブルなど)を制御するために使用されます。
  • つまり、ユーザーまたはアプリケーションは、ログインを介してSQLServerへの接続を開きます。ログインには、指定されたデータベース、およびそれらのデータベース内の指定されたオブジェクトへのアクセス権が付与されます。接続が開かれると、ユーザー/アプリケーションは必要なものすべてにアクセスできます。でも:
  • すべての接続には「現在のデータベース」コンテキストがあり、FoxproUSEコマンドと非常によく似ています。例を次に示します。

ログインでTestAとTestBの2つのデータベースにアクセスできるとします。両方のデータベースにはテーブルMyDataが含まれており、各テーブルには異なるデータ(AデータとBデータ)が含まれています。ログインすると、コンテキストが1つのデータベース、たとえばTestAに設定されます。を実行するSELECT * from MyDataと、データベースTestAからそのテーブルの内容を取得します。TestBからデータを取得する場合は、データを取得するSELECT * from TestB.dbo.MyDtaデータベースを指定して実行するか、データベースのコンテキストを変更する必要があります。プログラム的には、これはUseコマンド(例: `USE TestB')で実行されます。

これは、「それがどのように機能するか」の非常に単純な説明です。それはすべてプログラミングです。つまり、使用しているツール(アプリケーション)と達成しようとしているタスクに応じて、特定のアクションを実行する方法が数十あります。SQL Books Onlineのすべて、SQLServerに付属のドキュメントを読むことを強くお勧めします。Microsoftはこの製品のドキュメントを非常によく作成しました。

于 2012-06-15T13:53:23.907 に答える
1

フィリップは、SQLですべてが「オープン」であることについて正しいです。ただし、少し違った表現をすると思います。SQL-Serverが実行されている場合(通常、サーバー自体の起動時に開始される自動化されたサービスであるため)、SQLにはファイルの「ハンドル」を開いて、コピー、削除、移動などを防止します。

他の場所や別のサーバーにコピー/移動したい場合は、ハンドルを解放する「データベース」をデタッチする必要があり、何でもできます。

SQL-Serverでできることについて。データベースを明示的に開く必要はありませんが、database.table参照によってクエリを修飾できます...など

select t1.field
   from YourDatabase.SomeTable t1
   where t1.SomeField = ?whatever

データベースが接続されている限り、問題はありません。

于 2012-06-16T12:48:17.883 に答える