我正在使用SQL数据库SQL的Powershell文件上收到消息。该查询工作了大约1.5年,我假设它开始超时,因为在此期间作为查询一部分而提取的数据集呈指数增长。我收到的错误消息是:
执行超时已过期。在操作完成之前已经过了超时时间,或者服务器没有响应。
但是,当向查询中添加$ SqlCmd.CommandTimeout = 0时,如下所示,它仍然在相同的时间后超时。 SQL中的远程查询设置是默认的600秒。似乎在网络级别存在一个问题/权限,不允许该查询中的信息指示超时时间。我还为SQL查询添加了无限超时,以防出现DB DEADLOCK,但这似乎不是问题。当我运行完全相同的查询但返回的数据较少时,它运行良好。
为什么下面的无限超时命令会被忽略?
`
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True"
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName;User Id=$SQLUserName;Password=$SQLDBPWD"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.Connection = $SqlConnection
$SqlCmd.CommandTimeout = 0
$SqlConnection.Open()
if ($SqlConnection.State -eq 'Open')
{
$message = "SQL Connection established"
$message | out-file {filepath}:\{filepath}\{filename} -append
###SQL statements go here
$sql = "{large, complex SQL query here}"
$adapter = new-object system.data.sqlclient.sqldataadapter ($sql, $SqlConnection)
$adapter.Fill($table)
$table |ConvertTo-CSV -delimiter "`t" -NoTypeInformation| %{$_.Replace('"','')} | out-file {filepath}:\{filepath}\{filename}
$SqlConnection.Close();
`