Имена столбцов, возвращаемых запросом в Powershell 5.1 - PullRequest
0 голосов
/ 17 июня 2020

Так что это действительно вопрос из двух частей. Если мне нужно, я могу разбить его на 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 сервере?

Надеюсь, это хорошо объяснено, но мне нужна помощь.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...