我们有一个经典的ASP应用程序,只是工作我已经厌恶的修改的代码,免得我们调用的愤怒一些长-死了希腊神。

我们最近已要求增加一个功能应用程序。该特征的执行情况是真的只是一个数据库操作需要变化很小的用户界面。

我改变和作出的微小的修改提交一个新的数据价值的sproc呼吁(sproc1).

在sproc1,是直接从ASP,我们增加一个新的呼叫另一个sproc,恰好是位于另一个服务器,sproc2.

不知何故,这不起作用,通过我们的ASP应用程序,但工作在SQL管理工作室。

这里的技术细节:

  1. SQL2005年这两个数据库服务器。
  2. Sql登录进行身份验证,从ASP应用程序SQL2005服务器1。
  3. 链接的服务器从服务器1Server2工作。
  4. 在执行sproc1从SQL管理工作室工作的罚款。即使当资格的作为同一用户我们的代码使用(应用程序sql登录)。
  5. sproc2工作时被称为独立的sproc1从SQL管理工作室。
  6. VBScript(ASP)捕获一个错误,其中发现在XML回来的客户。错误的数量为0,错误描述的是空白。无论是从ADODB.连接的对象,并无论从任何Err。数/Err。说明产量VBScript从ASP侧。

因此,没有任何错误,也没有任何重复性(即通过SQL管理工作室)-任何人都不会知道的问题?

我们目前的计划是打破和深入的代码ASP边,让一个完全独立的呼叫器2。sproc2直接从ASP而不是试图背驮式通过sproc1.

有帮助吗?

解决方案

我的第一个反应是,这可能不是调用跨服务器的问题,而是从第一个调用第二个proc,而 this 可能是两个不同的行为。环境。

我的第一个问题是:如果从等式中删除跨服务器方面会发生什么?如果您可以设置一个测试系统,其中您的第一个proc调用第二个proc,但第二个proc位于同一服务器和/或同一个数据库中,您是否仍会遇到相同的问题?

沿着同样的路线:根据我的经验,当应用程序和SSMS得到不同的结果时,它通常是存储过程设置的问题。正如卢克所说,它可能是NOCOUNT。我有这种事情发生在代码中无关的PRINT语句中,虽然我似乎记得PRINTed值成为错误描述的一部分(非常违反直觉)。

如果在SSMS中运行此消息窗口时返回任何,请找出它的来源并使其停止。我必须查阅技术术语,但我的回忆是不同的查询环境对“错误”有不同的敏感性,并且当通过脚本语言进行ADO连接时,通过SSSM的默认连接不会在某些时候抛出错误将

最后一个想法:如果是环境问题,请在ASP页面的连接字符串上尝试不同的设置。例如,如果您有OLEDB连接,请尝试ODBC。尝试本机和非本机SQL Server驱动程序。查看您的提供商支持的连接字符串选项,并尝试其中任何看起来可能值得尝试的选项。

其他提示

您是否在两个存储过程中都设置了设置nocount ?我有一个类似的问题,虽然我不记得我此刻是如何解决的,但我知道这与它有关!

你可以从痛苦的 双跳的问题

双跳问题是当ASP/X页试图使用资源的位置的服务器上是不同的IIS服务器。

Windows NT挑战与反应 不支持 双跳模仿秀(那一旦通过的IIS服务器、相同的凭证,不能通过对后端服务器,用于认证)。

你应该验证试图二连接使用SQL分析器。

注意你的手工测试你是不是身份验证通过IIS。只有当你发起sql通过ASP/X页,这个问题清单。

更多的资源:

我遇到了类似的问题,我通过设置nocount并删除打印命令来解决它。

示例代码可能有帮助:)您是否尝试从存储过程返回两个表;我不认为ADO 2.6可以处理多个返回的表。

我确实考虑过(双跳),但是我所指的sproc-in-a-sproc调用与通过INNER JOIN进行的典型跨服务器连接之间的区别是什么?两者都将在Server1上执行,使用链接服务器凭据,并对服务器2进行身份验证。

任何人都可以确认调用sproc跨服务器与在数据表上进行连接不同吗?为什么?

如果链接服务器配置是一个sql帐户 - 被认为是双跳(因为你所指的是NTLM双跳?)

就多个结果集是否会回来而言 - 没有。 Server1.Sproc1和Server2.Sproc2都是“ExecuteNonQuery()”;在.net世界中并且不返回任何内容(没有结果集和没有返回值)。

尝试检查连接字符串中指定的用户对数据库的权限。 使用sql mgmt studio时,在连接字符串中使用相同的用户名登录数据库。

创建一些临时表来编写中间值和异常,因为它可以是调试应用程序的有效方法。

我可以检查一下:你加入了sproc2吗?在此之前,它的工作时间很长。

你能不能改变你从哪里调用sproc2?而不是从sproc1内部调用它,你可以从ASP调用它吗?这样您就可以在代码中控制对SQL的身份验证,而不必依赖于在服务器上设置任何信任或共享远程身份验证。

您的链接服务器是如何设置的?您通常可以选择如何对远程服务器进行身份验证,包括以当前登录用户身份登录或指定始终使用的SQL登录。您是否尝试将其设置为始终使用特定帐户?这应该消除调用远程过程中的任何可能的权限问题...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top