Так что это действительно вопрос из двух частей. Если мне нужно, я могу разбить его на 2. Я пытаюсь отобразить данные в PowerShell 5.1 для SqlBulkCopy. У меня 2 сценария ios пытаюсь разобраться. Для моего сопоставления я пытаюсь сопоставить по имени столбца и псевдопроцессу, с которым я сейчас работаю, с такими потоками:
Получить целевую таблицу (всегда SQL сервер) Имена столбцов, создав адаптер данных и заполнение таблицы данными результатами из "Select Top 1 * From " + $DestinationTableName
. -Эта часть довольно проста, и у меня проблема не здесь, а в именах исходных столбцов.
У меня есть 2 потенциальных источника данных. Один - SQL Сервер, другой - Oracle. Я знаю, что все запросы Oracle будут иметь хотя бы одно предложение where, и я знаю, что все запросы сервера SQL будут иметь как минимум один оператор Select или Select Distinct. Для начального PO C в запросах Oracle я решил столбец Source следующим образом:
$loweredQuery = $ExtractSQL.ToLower()
$StringArray = $loweredQuery.Split('where')
$AlteredQuery = $StringArray[0] + " where rownum=1"
$SourceCon = New-Object Oracle.ManagedDataAccess.Client.OracleConnection($SourceConnectionString))
$OracleAdapter = New-Object Oracle.ManagedDataAccess.Client.OracleDataAdapter($AlteredQuery,$SourceCon)
$sourceSet = New-Object -TypeName System.Data.DataTable
$OracleAdapter.Fill($sourceSet) | Out-Null
Это сработало, но после его просмотра, я думаю, вы можете увидеть мою проблему. Я не могу гарантировать, что у меня будет только один оператор where, из-за возможности вложенных подзапросов. Итак, проблема, которую я пытаюсь решить, заключается в том, как мне убедиться, что я заменил ПОСЛЕДНИЙ экземпляр предложения Where, чтобы получить только одну строку. Доходность некоторых из них может быть довольно большой, и я пытаюсь сократить накладные расходы.
Сценарий 2 У меня еще нет PO C, но я думаю, что у меня будет аналогичная проблема. Для SQL Server Source мне нужна только одна строка, поэтому я подумал, что могу просто заменить Select или Select Distinct на "Select Top 1 " + $remainderofSQLquery
или что-то в этом роде. Здесь та же проблема, но наоборот. Я не знаю, что это будут первые 2 слова в запросе. Предварительно могут быть общие табличные выражения или что-то в этом роде. Кроме того, после первого может быть больше операторов Select, опять же из-за вложенных подзапросов. Есть ли способ получить только имена столбцов из запроса, возвращаемого на SQL сервере?
Надеюсь, это хорошо объяснено, но мне нужна помощь.
Спасибо!