Hi,
I have a problem handling a varbinary column in PowerShell.
I am reading up some plan handles into a dataset. The plan_handle is varbinary(64) in SQL Server. Then I am trying to call a function in SQL Server for each plan handle.
$SqlTargetConnection.Open() $SqlCmdPlanHandlesGet = New-Object System.Data.SqlClient.SqlCommand("SELECT plan_handle FROM dbo.QueryPlans",$SqlTargetConnection) $SqlCmdPlanHandlesGet.CommandTimeout = 30 $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter($SqlCmdPlanHandlesGet) $DataSet = New-Object System.Data.DataSet $SqlAdapter.Fill($DataSet) $SqlTargetConnection.Close() $DataTable = new-object "System.Data.DataTable" $DataTable = $DataSet.Tables[0] #Add new columns $ColumnQueryPlan = New-Object System.Data.DataColumn query_plan,([string]) $DataSet.Tables[0].Columns.Add($ColumnQueryPlan) foreach ($Plan in $DataSet.Tables[0]) { $plan_handle = $Plan["plan_handle"] $SqlSourceConnection.Open() $SqlCmdQueryPlanGet = New-Object System.Data.SqlClient.SqlCommand("SELECT query_plan FROM sys.dm_exec_query_plan($plan_handle)",$SqlSourceConnection) $SqlCmdQueryPlanGet.CommandTimeout = 30 $QueryPlan = $SqlCmdQueryPlanGet.ExecuteScalar() $SqlSourceConnection.Close() }
I get this error:
Exception calling "ExecuteScalar" with "0" argument(s): "Incorrect syntax near '0'."
At char:51 + $QueryPlan = $SqlCmdQueryPlanGet.ExecuteScalar( <<<< )
I think that the problem is related to the data type of the plan_handle. All feedback is greatly appreciated.
Ola Hallengren
http://ola.hallengren.com