【问题标题】:Copy SQL Server table into a txt file before delete it from SQL Server将 SQL Server 表复制到 txt 文件中,然后再从 SQL Server 中删除它
【发布时间】:2019-10-21 19:41:58
【问题描述】:

我有一个从数据库表中删除一些行的存储过程。我需要在删除操作之前将数据复制到文本文件中,以检查已删除的内容 - 我该怎么做?

我的代码:

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'));

【问题讨论】:

  • 为了安全起见,请使用临时表,然后在需要时将其写入文本文件。必要时删除临时表。

标签: sql sql-server stored-procedures copy


【解决方案1】:

您可以使用 bcp 将表数据复制到文件中。您也可以使用 bcp 将数据从数据文件复制到表中。

【讨论】:

  • 您能举个例子吗?或者至少参考一个我可以看的例子?如果我得到一些有价值的参考,我愿意接受你的回答
  • @Mindan bcp tablename out 文件名 -U 用户名 -P 密码 -S 服务器名 -D(如果 DSN)-c 或 -n。在 microsoft.com 上查看完整的 bcp 文档。
【解决方案2】:

使用 SQLCMD,您可以使用以下方法:

  1. 将您的 SELECT 查询保存在一个 sql 文件中,我们将其命名为“myquery.sql”。该查询看起来与您的 DELETE 查询几乎相同,唯一的区别是我们将使用 SELECT 子句而不是 DELETE:
SELECT FROM Document WHERE...
  1. 使用以下 SQLCMD 命令执行查询并将输出导出到 TXT 文件:
sqlcmd -i c:\sql\myquery.sql -o c:\sql\myoutput.txt
  1. 继续删除您的行。或者,您可以为 DELETE 操作复制第 1 步和第 2 步,这样您就可以为 SELECT 操作创建一个 SQL 文件,并为 DELETE 操作创建第二个 SQL 文件。

可以通过 CmdExec 作业执行 sqlcmd 命令。只需 create a job 输入“操作系统”(CmdExec) 的步骤并在其中输入 sqlcmd 命令,然后从存储过程中执行 sp_start_job 以启动该作业。

【讨论】:

  • @Oliver López Ch 存储过程将在应用程序中作为函数调用,在这种情况下如何使用 sqlcmd?
  • 我刚刚用其他信息更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 2020-09-30
  • 2012-04-21
  • 1970-01-01
  • 2023-02-16
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 2014-05-19
相关资源
最近更新 更多