我试图对数据库执行QC脚本。这个脚本包含游标的使用,很多sql语句(~400行),使用表变量和各种有趣的东西。
脚本在SSMS中执行正常。
我试图通过powershell运行它:
$adOpenStatic = 3
$adLockOptimistic = 3
$TargetDatabaseName = 'databaseCatalogName'
$DatabaseName = 'DatabaseName'
$QCChecksLocation = 'C:\thisPathWorks\QC Checks.sql'
Start-Process odbcconf -wait -ArgumentList "/A {CONFIGSYSDSN ""SQL Server Native Client 11.0"" ""DSN=$TargetDatabaseName|Server=$DatabaseName|Database=$TargetDatabaseName|Trusted_Connection=Yes""}"
$TargetConn = New-Object -comObject ADODB.Connection
$QCResults = New-Object -comobject ADODB.Recordset
$TargetConn.ConnectionString = "DSN=$TargetDatabaseName"
$TargetConn.Open()
$SQL = get-content $QCChecksLocation
$QCResults.Open($SQL,$TargetConn,$adOpenStatic,$adLockOptimistic)
这会导致错误:异常调用"打开"用" 4"参数:"参数类型错误,超出可接受的范围,或彼此冲突。"
有任何帮助吗?
答案 0 :(得分:1)
看看我希望的是正确的reference for ADODB.Recordset Open Method我怀疑它不喜欢数组。
来源
可选。 Variant ,其值为有效的Command对象, SQL语句,表名,存储过程调用,URL或包含的文件名或Stream对象持久存储的Recordset。
它说变种,但我确信它不需要数组。 Get-Content
将返回多行文件的字符串数组。干净的书面SQL语句使用多行,因此不能期待你的。
如果您至少拥有PowerShell v3.0,则可以使用-Raw
的{{1}}开关将文件作为单个字符串返回。使用v2.0,您可以直接进入Get-Content
Out-String
上述两个命令都应该与$SQL = Get-Content -Raw $QCChecksLocation
$SQL = Get-Content $QCChecksLocation | Out-String
相同。这应该适用于您的Open方法。