0

わかりました。. . ASP、VB.net などを使用して Microsoft Visual Web Developer で開発している Web アプリケーションがあります。これにより、「売り手」は「買い手」が表示する広告を投稿できます。購入者が製品を検索すると、各結果に販売者の名前と製品の情報が表示される必要があります。問題は、さまざまな製品情報を保持するテーブルが 1 つのデータベースにあり、ユーザー/メンバーシップ情報が別のデータベースに格納されていることです。

例を挙げます。この場合、バイヤーは特定の本のすべての広告を検索しています。

  1. 各広告はデータベース db_1 とテーブル [Results] に記録され、ID_USER と ID_BOOK の列があります。
  2. 書籍情報は、ID、TITLE、AUTHOR の列を持つ db_1 [Books] に格納されます。
  3. ユーザー情報は、ID と NAME の列を持つ別のデータベース db_2 とテーブル [Users] に格納されます。

それを考えると、次のようなことをするにはどうすればよいですか。


SELECT u.Name [Seller]
, b.Title [Title]
, b.Author [Author]
FROM db_1.Results r
INNER JOIN db_1.Books b
ON b.id = r.id_book
INNER JOIN db_2.Users u
ON u.id = r.id_user
WHERE b.Title like 'Some Book Title'

これらのテーブルが同じデータベース内にある場合 (これをやりたかったのですが)、内部結合またはその他の select ステートメントを簡単に実行して、関連するデータのみを取得できます。データセットを作成して結合することも検討しましたが (例: http://www.vb-helper.com/howto_net_dataset_foreign_key.html )、サーバー負荷が高すぎませんか?

私は SQL ステートメントについて半分はまともですが、私の知識はすべて Google と実践から得たものです。そのため、古典的な訓練を受けたプログラマーなら誰でも知っている重要な警告を無視している場合は、申し訳ありません。助けてくれてありがとう。

更新: 状況について最新情報を提供すると思いました。この問題は、実際には権限とは何の関係もありませんでした。問題は、VWD がオブジェクトを見つけられなかったことです。CROSS JOIN を使用し、select ステートメントで .mdf ファイルのディレクトリ パスを明示的に指定することで、この問題を解決しました。ご協力いただきありがとうございました。

4

2 に答える 2

1

上記の @rs が示すように、クエリはマイナーな変更で機能します。dboデータベース名とテーブル名の間の部分は、オブジェクトの所有者名です。所有者が両方のスキーマに対する権限を持ち、ユーザー ID が両方のデータベースから選択する権限を持っている場合、クエリは機能します。

SELECT u.Name [Seller]
, b.Title [Title]
, b.Author [Author]
FROM db_1.dbo.Results r
INNER JOIN db_1.dbo.Books b
ON b.id = r.id_book
INNER JOIN db_2.dbo.Users u
ON u.id = r.id_user
WHERE b.Title like 'Some Book Title'
于 2012-12-13T03:11:17.793 に答える
1

両方のデータベースで同じユーザーを使用し、SQL サーバー管理ツールを使用して選択権限を付与する簡単な手順を次に示します。

  • db1 > セキュリティ > ユーザー > 新しいユーザーに移動します。
  • ログイン名をクリックして名前を参照し、使用するユーザーを選択します
  • db2 > セキュリティ > ユーザー > 新しいユーザーに移動します。
  • ログイン名をクリックして名前を参照し、上記の db1 から同じユーザーを選択します
  • db2に移動しuser table、右クリックしてプロパティに移動し、権限をクリックして検索ボタンをクリックし、上から同じユーザーを見つけてそのユーザーを選択します
  • [ユーザーまたはロール] ボックスで [ユーザー] を選択し、下の権限パネルに移動して [許可] を選択し、[OK] をクリックします。

データベース ユーザーがデータベース 2 からアクセスできるようにするすべてのテーブルに対して、最後の手順を繰り返します。

于 2012-12-13T03:26:27.360 に答える