0

Iam sqlcmd は初めてで、この sql cmd コードを実行しようとしています。

:Connect SERVERNAME
!!if exist $(FullBackup) del $(FullBackup)
GO
!!if exist $(TransactionLog) del $(TransactionLog)
GO

変数を渡し$(FullBackup)$(TransactionLog)powershell スクリプトを使用しています。

& $app -i $syncFileLocal -E -b -v FullBackup=("""$fullbackup""") TransactionLog=("""$transactionLog""");

syncFileLocal上記の sqlcmd コマンドが含まれています。

どういうわけか実行は秒後に停止します:Connect PROD-SQLMASTER

アップデート:

ハーコードされた値を使用する$(FullBackup)$(TransactionLog) 、スクリプトが機能するようです。とにかく、変数をpowershellに渡すことでそれを行うことができますか?

4

2 に答える 2

0

解決策を見つけました。これを適切な検証で使用することをお勧めします

:Connect $(ServerMaster)
DECLARE @resultBkp INT
EXEC master.dbo.xp_fileexist N'$(FullBackup)', @resultBkp OUTPUT
IF (@resultBkp = 1)
BEGIN
    DECLARE @resultDeleteBkp INT
    EXECUTE master.sys.xp_cmdshell '$(FullBackup)'
    EXEC master.dbo.xp_fileexist N'$(FullBackup)', @resultDeleteBkp OUTPUT
    IF (@resultDeleteBkp = 0)
    BEGIN
        PRINT 'Backup Deleted'
    END
    ELSE
    BEGIN
        SELECT ERROR_NUMBER(), ERROR_MESSAGE();
        RETURN;
    END
END
ELSE
BEGIN
    PRINT 'Backup file not found'
END

を使用しmaster.dbo.xp_fileexistてファイルが存在するかどうかを確認し、 master.sys.xp_cmdshellコマンドを使用してファイルを削除しました。

master.sys.xp_cmdshellデータベース サーバー を有効にするには、次のソリューションを使用してください: 'xp_cmdshell' SQL Serverを有効にする

私はそれをテストしましたが、powershell 経由で引数を渡すと正常に動作します。

于 2020-07-26T17:51:11.120 に答える