sql-server - 使数据库表暂时只读(并且不引发错误)
问题描述
在我们的软件中,我们在 Microsoft SQL-Server(2008 R2 到 2019)上托管的数据库表内有类似缓存。现在我必须调试一些仅在缓存为空时才运行的代码行。否则数据来自缓存,我需要调试的代码不会运行。
由于我厌倦了在再次调试之前总是手动删除此缓存表的内容,因此我正在寻找一种方法使此缓存表只读一段时间。
我无法更改实际将数据写入此缓存表的代码,因此我正在寻找一种仅使用 SQL Management Studio 来实现目标的方法,最好是运行 TSQL 脚本来打开只读-能力和另一个脚本再次将其关闭。
谷歌搜索我找到了几种方法来实现这一点,但不幸的是,我搜索的所有方法都会引发错误,这会阻止我们的软件运行。
我首选的解决方案是在我的缓存表上触发,如下所示:
CREATE TRIGGER CacheNoInsert ON CacheTable
INSTEAD OF INSERT, UPDATE, DELETE
AS
BEGIN
ROLLBACK TRANSACTION
END
但是这个触发器引发了一个错误。ROLLBACK TRANSACTION
并在语法错误中删除结果。
那么,有没有办法改变这个触发器不引发错误?或者有没有其他方法可以实现我的目标而不会出错?
解决方案
没关系,我想我找到了解决方案。删除并在它们ROLLBACK TRANSACTION
之间放置一段无意义的代码行就可以了。BEGIN
END
CREATE TRIGGER CacheNoInsert ON CacheTable
INSTEAD OF INSERT, UPDATE, DELETE
AS
BEGIN
PRINT 'doesntMatter'
END
但我希望事务仍然可以通过提交或回滚来删除。
推荐阅读
- c# - 如何设置 JsReport .NET 以使用当前的应用程序文件夹
- python - 附加到具有相同键、多个值的字典
- certificate - 有没有办法使用过期证书签署二进制文件?
- ilias - 在 ilUIHookPluginGUI 中获取高级元数据的更简单方法?
- postgresql - PostgreSQL 卡在恢复模式(strace 返回 semop)
- swift - 如何在 macOS 中访问受限文件(/User/user/Library/Messages/xxx)?
- jquery - 单击幻灯片指示点并显示相关幻灯片
- ruby-on-rails - 如何跟踪 ruby-on-rails 验证失败?
- typescript - Typescript @types 定义、接口和“新”
- rest - 演示页面和控制台之间的 Azure OCR 差异