如何将结果输出列用作 MSSQL 中的对象
How to use result output columns as objects in MSSQL
我想要实现的是通过使用 DATEDIFF 函数找出数据库备份的保留时间。
但是为了使用 DATEDIFF,我需要一些东西来比较结果中的数据,因为我不知道它在其他任何地方。
为什么是结果?
我发现此命令为我提供了完成任务所需的所有信息(BackupFinishDate、ExpirationDate):
RESTORE HEADERONLY FROM DISK = 'X:\Backups\Backuptest.bak'
我很确定我不能在生产服务器中创建临时表,所以如果这是一个选项,恐怕我不能使用它。
PS!如果有更好的方法来找出备份的保留天数,我会很乐意使用它。如果这在 PowerShell 中是可能的,那就更好了。
嗯,看来我用 PowerShell 提示回答了我自己的问题。我给了自己 :P
解决方案是:
$bkp_start = Invoke-Sqlcmd -ServerInstance myServer -Query "RESTORE HEADERONLY FROM DISK = 'X:\Backups\Backuptest.bak'" | Select-Object -ExpandProperty BackupFinishDate
$bkp_end = Invoke-Sqlcmd -ServerInstance myServer -Query "RESTORE HEADERONLY FROM DISK = 'X:\Backups\Backuptest.bak'" | Select-Object -ExpandProperty ExpirationDate
$RetentionInDays = New-TimeSpan -Start $bkp_start -End $bkp_end | Select-Object -ExpandProperty Days
Write-Output "Retention period : $RetentionInDays"
我喜欢 PowerShell.. 看起来有点笨拙,但它确实有效,我目前不知道更好的方法。
我想要实现的是通过使用 DATEDIFF 函数找出数据库备份的保留时间。 但是为了使用 DATEDIFF,我需要一些东西来比较结果中的数据,因为我不知道它在其他任何地方。
为什么是结果?
我发现此命令为我提供了完成任务所需的所有信息(BackupFinishDate、ExpirationDate):
RESTORE HEADERONLY FROM DISK = 'X:\Backups\Backuptest.bak'
我很确定我不能在生产服务器中创建临时表,所以如果这是一个选项,恐怕我不能使用它。
PS!如果有更好的方法来找出备份的保留天数,我会很乐意使用它。如果这在 PowerShell 中是可能的,那就更好了。
嗯,看来我用 PowerShell 提示回答了我自己的问题。我给了自己 :P
解决方案是:
$bkp_start = Invoke-Sqlcmd -ServerInstance myServer -Query "RESTORE HEADERONLY FROM DISK = 'X:\Backups\Backuptest.bak'" | Select-Object -ExpandProperty BackupFinishDate
$bkp_end = Invoke-Sqlcmd -ServerInstance myServer -Query "RESTORE HEADERONLY FROM DISK = 'X:\Backups\Backuptest.bak'" | Select-Object -ExpandProperty ExpirationDate
$RetentionInDays = New-TimeSpan -Start $bkp_start -End $bkp_end | Select-Object -ExpandProperty Days
Write-Output "Retention period : $RetentionInDays"
我喜欢 PowerShell.. 看起来有点笨拙,但它确实有效,我目前不知道更好的方法。