gpt4 book ai didi

sql-server - 如何关联不同数据库 (SQL Server) 中的两个表?

转载 作者:行者123 更新时间:2023-12-01 06:19:58 24 4
gpt4 key购买 nike

我需要从另一个数据库的表中获取一个值;如果这些表在同一个数据库中,那将非常容易,但由于它们不在同一数据库中,这会使事情复杂化。我试过这个:

SELECT TOP 8 prosql05.sa.cpsdata.M.membername, 
P.*
FROM prosql05.sa.bidata.priceexceptionhistorycsr P
JOIN prosql05.sa.cpsdata.members M
ON P.memberno = M.memberno
WHERE invoicedate BETWEEN '2016-09-04' AND '2016-09-10'
ORDER BY invoicedate

...但是得到错误消息(在 LINQPad 中),

Error 208: Invalid object name 'sa.BIData.PriceExceptionHistoryCSR'.

我很确定这是可能的(因为它们都在 PROSQL05 上),但是怎么做呢?

在 LINQPad 中选择的连接是“PROSQL05.sa.BIData

更新

我已经改变了我的尝试:

select top 8 M.MemberName, P.* 
from PriceExceptionHistoryCSR P, PROSQL05.sa.CPSData M
where InvoiceDate between '2016-09-04' and '2016-09-10'
and M.MemberNo = P.MemberNo
order by invoicedate

...现在得到“错误 208:无效的对象名称‘PROSQL05.sa.CPSData’。

这对我来说更有意义,但我仍然需要知道如何从 BIData 模式/数据库访问其他数据库(模式、IOW CPSData)中的表。

更新 2

根据 LINQPad 的属性对话框,服务器 = PROSQL05,用户名 = sa,数据库 = BIData。

那么这些知识如何影响 SQL 的结构?

最佳答案

在寻址数据库时,您总是必须使用这种形式

<servername>.<databasename>.<schemaname>.<tablename>

如果您的连接在同一台服务器上,您可以省略第一部分,留下

<databasename>.<schemaname>.<tablename>

如果您连接到同一个数据库,您可以再次省略第一部分

<schemaname>.<tablename>

但是让我们备份一下,您正在尝试访问同一台服务器上的另一个数据库。这意味着您可以省略其中一个数据库,而必须指定另一个数据库。我将假设您所有的表都在 dbo 架构中,可能就是这种情况。

如果您的连接是直接连接到bidata

,您应该这样查询
SELECT TOP 8 M.membername, 
P.*
FROM dbo.priceexceptionhistorycsr P
JOIN cpsdata.dbo.members M
ON P.memberno = M.memberno
WHERE invoicedate BETWEEN '2016-09-04' AND '2016-09-10'
ORDER BY invoicedate

关于sql-server - 如何关联不同数据库 (SQL Server) 中的两个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39493752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com