gpt4 book ai didi

sql-server - 如何避免存储过程中出现T-SQL错误?

转载 作者:行者123 更新时间:2023-12-03 07:46:24 24 4
gpt4 key购买 nike

我要管理多个数据库,每个数据库都需要特定存储过程的副本。

问题是,存储过程将其中一个数据库插入所有数据库的表中。对于那个数据库,该表是一个分区 View ,并且不是可更新的,我不需要插入。

我尝试做类似以下的事情:

CREATE PROCEDURE st_doit AS
-- Do lots of other stuff...
IF(DB_NAME() <> 'db3') BEGIN
INSERT INTO mytable...;
END

由于 db3语句,尝试在 INSERT中执行存储过程时,我仍然收到错误消息,即使在该数据库中,实际上也不会执行插入操作。将 INSERT包装在 TRY...CATCH块中也没有帮助。

为了便于维护,我真的很想避免在 db3中拥有该过程的特殊副本。通常,我不会在过程中添加这样的IF语句,但是在这种情况下,它确实是最好的解决方案,并且不会随着时间的推移而演变成其他特殊情况的嵌套。

因此,如果我实际上尝试插入到表中,那么如何强制SQL Server仅执行存储过程,而 生成错误?

编辑:由于使用动态SQL对我来说有点太杂乱,我的最终解决方案是将 IF块保留为陷阱,但要在 db3中注释掉有问题的块。不理想,但是可行。幸运的是,我不会经常更改此SP,但是我希望在每个数据库中都有它的“完整”副本。

最佳答案

您必须使用动态SQL从SQL Server“隐藏” INSERT。

CREATE PROCEDURE st_doit AS
-- Do lots of other stuff...
IF(DB_NAME() <> 'db3') BEGIN
EXEC SP_EXECUTESQL N'INSERT INTO mytable...';
END

关于sql-server - 如何避免存储过程中出现T-SQL错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4695584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com