我需要从另一个数据库中的表中获取值;如果表位于同一个数据库中,那将非常简单,但由于它们不是,因此使问题复杂化。我试过这个:
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中),
错误208:无效的对象名称&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架构/数据库访问其他数据库(Schema,IOW CPSData)中的表。
根据LINQPad的属性对话框Server = PROSQL05,User name = sa,Database = BIData。
那么这些知识如何影响SQL的结构?
答案 0 :(得分:6)
在寻址数据库时,您总是必须使用此表单
<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
答案 1 :(得分:1)
googeling你的错误消息显示,这不是一个linqpad消息,而是一个sql-server-error。 因此,您的查询中似乎存在错误。
我认为有一个您确定允许您的用户访问这两个数据库/架构吗?
假设你的&#34;连接&#34;不是它看起来的样子(显然,根据你对问题的最后评论,不是),试试看:
SELECT TOP 8 M.membername,
P.*
FROM priceexceptionhistorycsr P
JOIN prosql05.cpsdata.dbo.members M
ON P.memberno = M.memberno
WHERE invoicedate BETWEEN '2016-09-04' AND '2016-09-10'
ORDER BY invoicedate
答案 2 :(得分:0)
SELECT TOP 8 prosql05.cpsdata.sa.M.membername,
P.*
FROM prosql05.bidata.sa.priceexceptionhistorycsr P
JOIN prosql05.cpsdata.sa.members M
ON P.memberno = M.memberno
WHERE invoicedate BETWEEN '2016-09-04' AND '2016-09-10'
ORDER BY invoicedate
你可以尝试一下。看起来你的模式名称是sa,并且你将模式名称放在原始查询中的数据库名称之前
答案 3 :(得分:0)
要使代码清晰,请对另一个数据库的对象使用同义词。
例如,如果为目标对象sa.priceexceptionhistorycsr
创建同义词prosql05.bidata.sa.priceexceptionhistorycsr
,则只能使用同义词引用目标。