0

好的,到此为止。. . 我有一个使用 ASP、VB.net 等在 Microsoft Visual Web Developer 中开发的 Web 应用程序,它允许“卖家”发布广告供“买家”查看。当买家搜索产品时,每个结果都需要显示卖家的名字,以及产品的信息。问题在于保存各种产品信息的表位于一个数据库中,而用户/会员信息存储在另一个数据库中。

我将提供一个例子。在这种情况下,买方正在搜索特定书籍的所有广告。

  1. 每个广告都记录在数据库 db_1 和表 [Results] 中,其中包含 ID_USER 和 ID_BOOK 列。
  2. 书籍信息存储在 db_1 [Books] 中,其中包含 ID、TITLE、AUTHOR 列。
  3. 用户信息存储在单独的数据库 db_2 和表 [Users] 中,其中包含 ID 和 NAME 列。

鉴于此,我将如何执行以下操作:


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'

如果这些表在同一个数据库中(我现在希望我已经这样做了),那么我会很容易地运行一个内部连接或其他一些选择语句来只提取相关数据。我也考虑过创建数据集并加入它们(例如,http ://www.vb-helper.com/howto_net_dataset_foreign_key.html ),但这不会太重服务器吗?

我对 SQL 语句有一半的了解,但我所有的知识都来自谷歌和实践,所以如果我忽略了每个受过经典训练的程序员都知道的一些关键警告,我深表歉意。预先感谢您的帮助。

更新:我想我会提供有关情况的更新。该问题实际上与权限无关。问题是 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 server 管理工具授予选择权限的简单步骤

  • 转到 db1 > 安全 > 用户 > 新用户。
  • Click login name and browse name and select user you want to use
  • go to db2 > security > users > new user.
  • Click login name and browse name and select same user from db1 above
  • Go to user table in db2, right click and go to properties click permissions and click search button to find same user from above and select that user
  • In User or roles box select user and then go to permissions panel below and check Grant for select and click ok.

Repeat last step for all tables you want database user to have access from database 2

于 2012-12-13T03:26:27.360 回答