sql - 在从 SQL Server 中删除之前将 SQL Server 表复制到 txt 文件中
问题描述
我有一个从数据库表中删除一些行的存储过程。我需要在删除操作之前将数据复制到文本文件中,以检查已删除的内容 - 我该怎么做?
我的代码:
DELETE FROM Document
WHERE DocumentID IN (SELECT DISTINCT m.MemberID
FROM Member m
LEFT JOIN
(SELECT
*,
ROW_NUMBER() OVER (PARTITION BY memberid ORDER BY id DESC) AS rn
FROM Insurance) x ON m.MemberID = x.MemberID AND x.rn = 1
WHERE
((x.id IS NULL AND m.LastChangedDateTime < '2019-10-01')
OR x.ResignationDate < '2019-10-01'));
解决方案
使用 SQLCMD,您可以使用以下方法:
- 将您的 SELECT 查询保存在一个 sql 文件中,我们将其命名为“myquery.sql”。该查询看起来与您的 DELETE 查询几乎相同,唯一的区别是我们将使用 SELECT 子句而不是 DELETE:
SELECT FROM Document WHERE...
- 使用以下 SQLCMD 命令执行查询并将输出导出到 TXT 文件:
sqlcmd -i c:\sql\myquery.sql -o c:\sql\myoutput.txt
- 继续删除您的行。或者,您可以为 DELETE 操作复制第 1 步和第 2 步,这样您就可以为 SELECT 操作创建一个 SQL 文件,为 DELETE 操作创建第二个 SQL 文件。
可以通过 CmdExec 作业执行 sqlcmd 命令。只需使用键入“操作系统”(CmdExec)的步骤创建一个作业并在其中键入您的 sqlcmd 命令,然后从存储过程中执行sp_start_job以启动该作业。
推荐阅读
- ios - UITextView 避免文本选择,但保留可点击的链接
- gurobi - 为什么我不能再使用 Solver qpsolver?
- php - Magento2 - 无法分配内存
- reactjs - 如何在搜索输入上使用 React 上下文并与其他组件共享输入?
- javascript - 如何在方形容器上均匀分布点?
- sql - 如何从日期范围中获取最大天数的月份数?
- mysql - 使用 Sgt_asText(point(longitude, latitude)) 的 mysql 查询的 PotgreSql 等效项是什么?
- ios - 只有前两个 sender.tag 用于表视图中的部分标题
- laravel - 如何使用一些数据和图像 vue.js 发送 axios 请求
- android - 发布版本不等于 react-native run-android 的版本