sql-server - 删除表中除系统版本(历史)表之外的所有数据
问题描述
我正在尝试删除除系统版本之外的所有表中的所有数据(因为我们不能)。这是在运行每个测试之前清除数据的集成测试的一部分。
以下语句返回1
历史表(我们无法在它们上执行delete from
的那些。
SELECT OBJECTPROPERTY(OBJECT_ID('table_name'), 'TableTemporalType')
所以我的尝试如下:
-- Remove check constraints
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
-- Delete data
EXEC sp_MSforeachtable 'SET QUOTED_IDENTIFIER ON; IF OBJECTPROPERTY(OBJECT_ID(''?''), ''TableTemporalType'') != 1 DELETE FROM ?'
-- Restore check constraints
EXEC sp_MSForEachTable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT ALL'
但是,我仍然收到错误消息:
Cannot delete rows from a temporal history table 'dbo.table_name'.
我不确定我做错了什么!
任何提示表示赞赏!
解决方案
我会通过使用 sys.tables 生成一些动态 sql 来做到这一点。这样的事情应该非常接近你想要做的事情。
declare @sql nvarchar(max) = ''
select @sql = @sql + 'delete ' + name + ';'
from sys.tables
where temporal_type = 0
select @sql
--uncomment the line below when you are ready to blow away all your data
--exec sp_executesql @sql
推荐阅读
- r - 在没有 RSelenium 的情况下在 R 中抓取帧?
- react-native - 如何将对象映射到 Material-ui 输出
- azure - 如何创建 Azure API 网关资源?
- php - 使用 Symfony 5/Twig“数组到字符串转换”的嵌套数组问题
- java - 我得到一个变量值为零,即使它在java中分配了一些值
- angular - SASS 样式未完全加载
- node.js - 将信息从数据库返回到服务器 - 异步/回调函数语法?
- python - 从invest.com 上抓取历史经济数据
- python - macOS 上的 Python“DPI-1047 无法找到 dlopen(libclntsh.dylib)”
- python - 在 python 中跨实例缓存大型数据结构,同时维护类型