我创建了一个视图,其中包含来自链接服务器的视图,并且我正在将其插入表中。当我查询表时,当where语句引用链接服务器表中的数据时,它不返回任何数据。但是,当不使用where语句时,它确实会提取所有数据。为什么这样做,因为我没有太多使用LinkedServers的经验。
这是我用来填充视图的代码。
ALTER VIEW [dbo].[weightsDashboard]
AS
SELECT *
FROM [dbo].[weightsYak]
UNION ALL
SELECT *
FROM OPENQUERY([10.3.50.62\AGJET], 'SELECT * FROM [CheckWeigher].
[dbo].[weightsSs]')
然后我运行它以创建要报告的数据集。
select *
into Dataset_SaleSummary
from [dbo].[weightsDashboard]
谢谢。
答案 0 :(得分:0)
根本原因将是驱动程序。使用ODBC而不是OLE DB。如果您尝试从sql server连接oracle数据库
从SQL Server删除链接的服务器 右键单击“链接服务器”文件夹,然后选择“新链接服务器...” 链接服务器:输入任何内容。这将是新链接服务器的名称 提供程序:选择“用于OLE DB的Oracle提供程序” 产品名称:输入“ Oracle”(不带双引号) 数据源:从TNSNAMES.ORA文件输入别名。 提供者字符串:留空 位置:留空 目录:留空 现在转到“安全性”选项卡,然后单击最后一个单选按钮,即“使用此安全性上下文进行设置:”,然后输入用于连接的用户名和密码。
SQL 2014通过OPENQUERY从SQL 2000获取数据时,我遇到了完全相同的问题。由于ODBC兼容性问题,我不得不保留用于ODBC驱动程序的通用OLE DB。此外,问题仅在于SQL非管理员帐户。所以最后,我找到的解决方案是添加SET ROWCOUNT 0:
SELECT * FROM OPENQUERY(DWH_LINK, 'SET ROWCOUNT 0 SELECT * FROM TABLEA ')
似乎行数可能已通过SQL过程(或针对此用户会话)进行了更改,因此将其设置为0会强制其返回“所有行”。