C# C SQL库正在将我的查询修改为完全限定的表

C# C SQL库正在将我的查询修改为完全限定的表,c#,sql-server,tsql,dns,connection-string,C#,Sql Server,Tsql,Dns,Connection String,它正在更改我的查询,并且似乎在我没有明确告诉它的情况下完全限定了我的表。有没有办法阻止它这样做 这是我看到的相关信息。如果还有什么可以帮忙的,请告诉我 我们有一个名为serverName的SQL服务器。它已经生产多年了。它已从Windows 2008服务器迁移到Windows 2012服务器。新服务器的名字是sql_1234_4321,不是真名,但同样可怕 我们有第n个应用程序访问旧服务器名SQL Server,因此我们将旧服务器脱机,并为serverName创建一个DNS条目,指向新的SQL_

它正在更改我的查询,并且似乎在我没有明确告诉它的情况下完全限定了我的表。有没有办法阻止它这样做

这是我看到的相关信息。如果还有什么可以帮忙的,请告诉我

我们有一个名为serverName的SQL服务器。它已经生产多年了。它已从Windows 2008服务器迁移到Windows 2012服务器。新服务器的名字是sql_1234_4321,不是真名,但同样可怕

我们有第n个应用程序访问旧服务器名SQL Server,因此我们将旧服务器脱机,并为serverName创建一个DNS条目,指向新的SQL_1234_4321,希望我们不必访问所有访问旧服务器的应用程序的连接字符串

除了一些C ASP.NET MVC应用程序外,这在大多数情况下都有效

他们正在使用System.Data.SqlClient.SqlCommand

连接字符串:

Data Source=serverName;Initial Catalog=USData; Persist Security Info=True; User ID=appUn;Password=appPw
SQL查询:

select FirstName from Customers
代码:

我在新的sql_1234_4321服务器上添加了一个链接服务器serverName,它只指向自身,这似乎解决了问题。然而,这感觉非常肮脏,让我怀疑它是否真的在进行跨服务器查询,或者它是否聪明到可以说“嘿!我们是在自我攻击,所以不要担心上网会让它变得更贵,但我对此表示怀疑

我曾考虑过使用同义词,但问题是我们的表中有服务器名称。并且可能会有查询命中其中包含服务器名称的服务器,因此以下操作将不起作用:

CREATE SYNONYM serverName FOR sql_1234_4321;
因此,我必须为服务器上的每个数据库创建一个特定的同义词是有意义的:

CREATE SYNONYM serverName.database1 FOR sql_1234_4321.database1;
CREATE SYNONYM serverName.database2 FOR sql_1234_4321.database2;
CREATE SYNONYM serverName.database3 FOR sql_1234_4321.database3;
CREATE SYNONYM serverName.database4 FOR sql_1234_4321.database4;
CREATE SYNONYM serverName.database5 FOR sql_1234_4321.database5;
CREATE SYNONYM serverName.database6 FOR sql_1234_4321.database6;
CREATE SYNONYM serverName.database7 FOR sql_1234_4321.database7;
CREATE SYNONYM serverName.database8 FOR sql_1234_4321.database8;
CREATE SYNONYM serverName.database9 FOR sql_1234_4321.database9;
CREATE SYNONYM serverName.database10 FOR sql_1234_4321.database10;
正如你所看到的,这将是一个噩梦,维护和除此之外,感觉超级脏


我的问题是。。。表名在什么时候根据连接字符串完全限定?有没有办法防止这种情况发生?

大卫·布朗让我找到了问题所在。我的查询实际上引用了一个视图,该视图引用了旧服务器。我有很大的疏忽,没有注意到这一点。谢谢David

David Browne让我找到了问题所在。我的查询实际上引用了一个视图,该视图引用了旧服务器。我有很大的疏忽,没有注意到这一点。谢谢David

我想知道如果将模式dbo添加到查询中会发生什么,例如从dbo中选择FirstName.CustomersSystem.Data.SqlClient不会这样做。SQL Server不会这样做。您需要进一步进行故障排除,以确定查询来自何处,或者生成问题的便携式副本。出于您提到的原因,并且由于不完全支持,您不应该无限期地继续使用环回链接服务器。请在数据库中查找可能引入th 4部分名称的任何现有视图或同义词。您不需要连接字符串中的初始目录,这是默认数据库。您可以使用USData添加到字符串查询中;相反,当一台服务器连接了多个数据库时。我怀疑DNS入口解决方案是否可持续。不管涉及到多少个应用程序,最好只更正连接字符串。奇怪的是,如果将模式dbo添加到查询中会发生什么,例如从dbo中选择FirstName。CustomerSystem.Data.SqlClient不会这样做。SQL Server不会这样做。您需要进一步进行故障排除,以确定查询来自何处,或者生成问题的便携式副本。出于您提到的原因,并且由于不完全支持,您不应该无限期地继续使用环回链接服务器。请在数据库中查找可能引入th 4部分名称的任何现有视图或同义词。您不需要连接字符串中的初始目录,这是默认数据库。您可以使用USData添加到字符串查询中;相反,当一台服务器连接了多个数据库时。我怀疑DNS入口解决方案是否可持续。无论涉及多少个第n个应用程序,您只需执行更正连接字符串的工作可能是明智的。
CREATE SYNONYM serverName FOR sql_1234_4321;
CREATE SYNONYM serverName.database1 FOR sql_1234_4321.database1;
CREATE SYNONYM serverName.database2 FOR sql_1234_4321.database2;
CREATE SYNONYM serverName.database3 FOR sql_1234_4321.database3;
CREATE SYNONYM serverName.database4 FOR sql_1234_4321.database4;
CREATE SYNONYM serverName.database5 FOR sql_1234_4321.database5;
CREATE SYNONYM serverName.database6 FOR sql_1234_4321.database6;
CREATE SYNONYM serverName.database7 FOR sql_1234_4321.database7;
CREATE SYNONYM serverName.database8 FOR sql_1234_4321.database8;
CREATE SYNONYM serverName.database9 FOR sql_1234_4321.database9;
CREATE SYNONYM serverName.database10 FOR sql_1234_4321.database10;