Azure Elastic Query:如何从Legal库删除Records库accesslogs表指定行?
配置信息
- 数据库引擎:
mybusiness.database.windows.net - 记录数据库:
Records→dbo.accesslogs - 合规数据库:
Legal→dbo.personalinfo - 权限数据库:
Access→dbo.accessinfo
问题描述
- 员工入职时,其
employeeID(主键)、姓名、性别、税号、地址等个人数据会被录入Legal数据库的dbo.personalinfo表,该数据库管控严格。 - 获得办公室门禁权限的员工会注册刷卡令牌,其
employeeID(外键)、tokenID(主键)及令牌可用/不可用区域等信息存储在Access数据库的dbo.accessinfo表。 - 员工刷门禁令牌时,
tokenID(外键)、门禁点、日期时间、accessID(主键)会被记录在Records数据库的dbo.accesslogs表,accessID对每一次RFID令牌扫描(无论成功与否)均唯一。 - 员工离职后,需从
dbo.accesslogs表清除其数据,计划通过Legal数据库创建弹性查询(elastic query)实现:- 在
Legal数据库中执行T-SQL语句,创建Access数据库dbo.accessinfo表的外部表(External table); - 在
Legal数据库中执行T-SQL语句,创建Records数据库dbo.accesslogs表的外部表(External table);
- 在
- 在
Legal数据库中执行T-SQL语句,创建名为#userrecords的临时表,包含对应员工employeeID的所有tokenID关联的accessID。
问题
如何在Legal数据库中编写T-SQL查询,利用临时表中的accessID删除Records数据库dbo.accesslogs表中的对应行?
解决方案
在Legal数据库中,直接通过已创建的dbo.accesslogs外部表,结合临时表#userrecords的accessID执行删除操作即可,具体语句如下:
-- 替换accesslogs_external为你实际创建的Records库accesslogs表外部表名称 DELETE FROM [dbo].[accesslogs_external] WHERE accessID IN (SELECT accessID FROM #userrecords);
注意事项
- 务必确保外部表名称与实际创建的一致,避免因名称错误导致操作失败。
- 执行删除前建议先执行查询验证待删数据,避免误删:
SELECT * FROM [dbo].[accesslogs_external] WHERE accessID IN (SELECT accessID FROM #userrecords);
- 由于
Legal数据库管控严格,需确认当前执行账号具备外部表的删除权限。
内容的提问来源于stack exchange,提问作者CyberVector Workspace
相关产品推荐
相关产品推荐

