对表使用 sql server 2005 同义词会导致动态查询生成错误

Posted

技术标签:

【中文标题】对表使用 sql server 2005 同义词会导致动态查询生成错误【英文标题】:using sql server 2005 synonyms for table causes dynamic query generation errors 【发布时间】:2009-12-23 22:11:53 【问题描述】:

我有一种情况,我在服务器 A 上有一个目录,在服务器 B 上有一个同名目录。我在服务器 B 上使用同义词,以便 一些 表实际上只是通过到服务器 A。

这样,从 ServerB.Table 调用 select *,实际上是从 ServerA.Table 透明地返回数据。当我进行选择时,这似乎工作正常,如果我手动插入 tsql 脚本也工作正常,但是,当我使用 ADO.NET 适配器时,它给我一个错误,说“动态 SQL 生成不受 SelectCommand 支持不返回任何基表信息。”这通常意味着在返回数据时没有可用的主键信息。有没有办法解决? (我最好能够继续使用同义词,因为排除它的使用并不是一个真正的选择)。

我知道有一个“ID”列始终是主键,如果需要,我可以将主键信息硬编码回 ado.net 适配器/数据表中。

谢谢!

【问题讨论】:

【参考方案1】:

您正在使用SQLCommandBuilder 获取SQL 进行数据修改操作。

由于远程表没有返回元数据,因此命令生成器无法生成适当的SQL 用于从表中更新或删除,因为它不知道将哪个字段用作PK

您应该为您的数据适配器提供自己的UpdateCommandDeleteCommand

代码见this link。

【讨论】:

是的,不幸的是,我希望有一种方法可以做到这一点,而无需手工制作所有更新命令:/ 或者最糟糕的是,只需在表上设置主键。

以上是关于对表使用 sql server 2005 同义词会导致动态查询生成错误的主要内容,如果未能解决你的问题,请参考以下文章

分区是不是适用于 SQL Server 2005 标准版 SP2

SQL SERVER 触发器介绍

MSSQL sql server 2005/2008 row_number()函数应用之–删除表中重

在 SQL Server 上为 Oracle 存储过程使用同义词

SQL Server 2005 会因为我使用 nvarchar(50) 而不是整数作为主键而惩罚我吗?

SQL Server 2005 全文搜索:干扰词