【问题标题】:Dynamic stored procedure in different SQL servers?不同SQL服务器中的动态存储过程?
【发布时间】:2013-02-28 09:28:42
【问题描述】:

我的客户想从应用程序中更改服务器,我的意思是从应用程序中输入新的 SQL 服务器名称并在 SQL 服务器数据库表中搜索关键字。我有存储生产者,它适用于一台 SQL 服务器。

如果客户端在应用程序级别更改 SQL 服务器名称,则应用程序中的我的连接字符串将不起作用。因为我使用的连接字符串中的数据库可用于一台服务器。

我该如何处理这种情况? .反正有sp是动态的吗?

【问题讨论】:

  • 不允许他们更改服务器?为什么要这么做?我想你可以为数据库创建一个镜像。
  • 客户端要在不同的服务器上搜索关键字。
  • 哇。然后,您需要让您的应用程序知道要检查哪个服务器,并根据客户端选择的服务器动态更改 SqlConnection 属性。您可以将两台服务器作为连接字符串存储在配置文件中,并在构建连接时引用相应的服务器。
  • 我建议重新措辞这个问题以反映您的实际需求:您在两台不同的服务器上拥有相同的存储过程,并且您的应用程序需要根据用户输入调用其中一个或另一个。这是否描述了场景?
  • 是的。亚伦。但关键是.. 客户端可以有任何 SQL 服务器(同一网络),有时我的 sp 可能不存在。

标签: asp.net sql-server sql-server-2008 tsql


【解决方案1】:

在一个服务器中,您可以创建一个指向另一台服务器的synonym。假设你有链接服务器,在Server1:

CREATE SYNONYM dbo.ProcedureName FOR Server2_Linked.DatabaseName.dbo.ProcedureName;

现在当应用程序在Server1 中调用dbo.ProcedureName 时,它并不知道它实际上是在Server2 上执行的。

如果这不是你想要的,我认为你必须详细说明你的问题。

【讨论】:

  • 我的服务器无法相互链接。我的意思是没有定义。如果不创建新的数据库并执行它,我需要检查我的服务器上是否存在 SP。
  • 什么会为这个存储过程生成代码?你的意思是你想让你的应用程序尝试在一个服务器上执行一个存储过程,但是如果它在那里没有找到它,从另一台服务器获取存储过程定义,然后创建它,然后执行它?这听起来不像您的 应用程序 应该做的事情。如果你在这两个地方都需要存储过程,现在应该这样做了。
  • 例如,你可以备份你的数据库,在新服务器上恢复它,更新连接字符串,擦手,祝他们好运。
  • 如果问题是连接字符串在应用程序中是硬编码的,并且您因为没有源代码而无法重新编译它,(1)不要再这样做了,以及 (2) 您可以在客户端网络实用程序或 DNS 中使用别名,以便在旧服务器离线后使新服务器看起来像旧服务器。
猜你喜欢
  • 1970-01-01
  • 2018-04-01
  • 2018-11-13
  • 1970-01-01
  • 2023-03-10
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多