【问题标题】:Use Invoke-SQLCmd and return number of rows deleted/affected使用 Invoke-SQLCmd 并返回删除/受影响的行数
【发布时间】:2021-05-06 03:00:55
【问题描述】:

我有一个非常简单的 powershell 命令,其中 $query 只是“从 mytable 中删除”

Invoke-sqlcmd -ServerInstance $databaseserver -Username $databaseuser -Password $databasepassword -Database $databasename -Query $query| Out-File -filePath $output

但是,这不会输出受影响的行数?

SQLCMD 中的等效项确实 输出不受影响的行:

& sqlcmd -S . -U $databaseuser -P $databasepassword -Q $query    -o $output

有没有办法让Invoke-sqlcmd返回行数?

【问题讨论】:

  • 您为什么不编写自己的调用 .NET 的 Invoke-SqlCmd 呢?应该可以使用SqlCommand.ExecuteNonQuery
  • 或者继续使用sqlcmd.exe,我想你会发现sqlcmd.exe中的其他功能在invoke-sqlcmd中缺少

标签: sql-server powershell


【解决方案1】:

您可以在查询后立即调用 SQL 中的 ROWCOUNT 函数功能来执行以下操作:

Select @@ROWCOUNT

以你的 PowerShell 为例:

$query = "DELETE FROM MyTable; SELECT @@ROWCOUNT AS DeletedRows"
$Results = Invoke-sqlcmd -ServerInstance $databaseserver -Username $databaseuser -Password $databasepassword -Database $databasename -Query $query| Out-File -filePath $output
Write-Host "Total rows deleted: $($Results.DeletedRows)"

更多关于 ROWCOUNT 的信息@http://technet.microsoft.com/en-us/library/ms187316(v=sql.90).aspx

此外,您可以在删除记录之前进行行计数,并在删除后进行另一个行计数,然后进行差异。这仅适用于插入/删除的记录,不适用于更新的记录。

SELECT COUNT( my_table.my_col ) AS row_count

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多