我正在尝试远程运行安装在数据库上的一些SSIS包,我可以访问数据库并可以看到SSISDB及其目录。我遇到的问题是如何最好地执行我在目录中的项目中的一个包。
我知道DTExec是一个选项,如果我使用invoke-command但是如果可能的话不想这样做,有时候可能有多个连接而且我看到某些盒子上有崩溃的崩溃执行DTExec。
我尝试从包中获取执行脚本并将其放在PowerShell中并将其用作SQL查询,我对这种方法的长期担心是如果包更改,那么我需要跟踪它。
我想要的最简单的解决方案是按名称执行包,如果我需要更新比每个包的整个SQL脚本更简单的名称。这个更简单的解决方案是否可行,最好的方法是什么?到目前为止,我没有运气这个作为SMO的执行。我尝试过的是:
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | out-null
$SMOserver = New-Object ('Microsoft.SqlServer.Management.Smo.Server') -argumentlist $Server
#This sets the connection to mixed-mode authentication
$SMOserver.ConnectionContext.LoginSecure=$true
$query = @" this is where my execute SQL goes from the SSIS catalog "@
$db2 = New-Object ('Microsoft.SqlServer.Management.Smo.Database')
$db2 = $SMOserver.Databases[$database]
Write-Host "My Query: $query"
$results2 = $db2.ExecuteNonQuery($query)
Write-Host "Results: " $results2
虽然当我跑这个时,我常常得到一个没有价值的回报。
答案 0 :(得分:0)
通过使用sqlcmd并将各个任务分配到Jobs中,然后使用sqlcmd执行作业,结束了解决这个问题。
所以使用用户名和密码:
$ jobOutput = sqlcmd -S $ server -U $ username -P $ password -Q" EXEC msdb.dbo.sp_start_job @ job_name = N' $ jobName'"
这允许访问并在结果上提供了一些输出,