【问题标题】:Overwrite SQL Server table data with BulkCopy使用 BulkCopy 覆盖 SQL Server 表数据
【发布时间】:2020-01-24 03:42:16
【问题描述】:

我有这段代码可以从$dmvResult(数据表)批量复制到 SQL Server 表中。

$dmvResult = DMV_Query 'SELECT [SESSION_ID], [SESSION_SPID]
                        FROM $SYSTEM.DISCOVER_SESSIONS';
$ConnectionString ='Data Source={0}; Database={1}; Trusted_Connection=True;' -f $Server,$DB

$bulkCopy = new-object Data.SqlClient.SqlBulkCopy($ConnectionString)
$bulkCopy.DestinationTableName=$TableSomething

foreach ($column in $dmvResult.Columns) { 
     $bulkCopy.ColumnMappings.Add($column.ColumnName, $column.ColumnName) > $null 
}

$bulkCopy.WriteToServer($dmvResult)

它完美地工作,但是,它附加了数据,因此创建了越来越多的行。我可以在每次运行脚本时以某种方式覆盖 SQL Server 表中的数据吗?我不想保留现有数据,而是在每次脚本运行时覆盖

基本上,我想做这样的事情:

$bulkCopy.WriteToServer($dmvResult) | overwrite

【问题讨论】:

  • @Olaf 是的,但是,那是专门关于如何映射的。现在我解决了这个问题,所以我的新问题是覆盖,这就是为什么我打开一个新线程,就像我过去被建议为任何新主题做的那样
  • 先删除表外数据
  • @Nick.McDermaid 该死,我希望批量复制的覆盖方法或属性
  • 我刚刚检查了bulkcopy的定义,似乎没有。请注意,如果源表和目标表位于同一台服务器上,则运行单个查询会比将数据移出和移入数据库更有效。

标签: sql-server powershell


【解决方案1】:

我也有同样的问题。我看到的唯一解决方法是创建一个临时表和bulkCopy。然后使用存储过程来合并临时表和您要覆盖的表。

【讨论】:

  • 我们实际上最终需要所有数据,所以我不必再覆盖了。但是,如果您仍然想覆盖,一种方法就是一遍又一遍地截断表格,即使是基于时间戳。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 2015-11-20
  • 2021-11-06
  • 2022-11-23
  • 2023-03-27
相关资源
最近更新 更多