【问题标题】:Limits on ADO connection execute queriesADO 连接执行查询的限制
【发布时间】:2014-06-17 14:03:13
【问题描述】:

我有一个执行很多更新的 SQL 脚本。当我从文本文件中检索脚本(在经典 ASP 页面中)并尝试执行它时,如果我将内容复制并粘贴到 Management Studio 中,它似乎并没有应用我期望的所有更新,查询工作正常。我无法弄清楚为什么会这样。在这样的脚本中可以包含多少个语句/操作是否有限制?

同样,执行命令oConn.Execute strSql 不会失败,它只是移动到经典 ASP 代码的下一行。有什么方法可以测试错误吗?

【问题讨论】:

  • 我想我已经解决了这个问题的第一部分 - 我在脚本中途有一个 SELECT 语句用于调试目的,我认为这一定是导致脚本在执行之前返回该结果集脚本的其余部分。这有意义吗?
  • 您是否在脚本中的任何位置使用GO 批处理分隔符?

标签: sql-server asp-classic ado


【解决方案1】:

很遗憾,我没有足够的声誉来评论您的问题,但是您是否尝试过将代码包装在 TRANSACTION 块中?如果出现问题,非常有用。

至于错误处理,you can refer to the @@ERROR...

DECLARE @ErrorVar INT

RAISERROR(N'Message', 16, 1);
IF @@ERROR <> 0
    -- This PRINT statement prints 'Error = 0' because
    -- @@ERROR is reset in the IF statement above.
    PRINT N'Error = ' + CAST(@@ERROR AS NVARCHAR(8));
GO

【讨论】:

  • 谢谢,这让我走上了正轨。我将脚本包装在一个事务中,然后在最后检查错误,如果遇到任何错误,我就回滚事务并返回错误。
【解决方案2】:

Paul 让我在这里走上正轨,谢谢。我多年来一直在编写 SQL 代码,但我承认我在事务领域只涉足过一点点。在下面的代码之后,我将其他统计信息和失败消息放入一个表中,我在调用脚本后在 ASP 代码中查询。

BEGIN TRY BEGIN TRANSACTION --My long update script placed in here
COMMIT TRANSACTION END TRY BEGIN CATCH IF @@TRANCOUNT > 0 BEGIN ROLLBACK TRANSACTION SET @FailMsg = ERROR_MESSAGE() + ' Failed at line ' + CAST(ERROR_LINE() as varchar) + '.' END END CATCH

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2020-12-26
    • 2013-11-02
    • 1970-01-01
    相关资源
    最近更新 更多