#powershell
Вопрос:
Я искал уже несколько часов и не могу понять, как это сделать.
Я запрашиваю базу данных MSSQL, которая возвращает 2 столбца, одно из этих значений пустое/нулевое, но представляет что-то в базе данных SQL(я протестировал его отключение).
Как бы я проверил, что возвращается из моего запроса для пустого значения, и изменил это на что-то другое?
$TestQuery = Invoke-Sqlcmd -Database $DB -Query $qcd -ServerInstance "SomeInstanceInstance1" -Verbose
Результат:
Activity Setting
-------- -------
All Operation Enabled
Backup Enabled
Restore Enabled
Prune Enabled
Aux Copy Enabled
Schedule Enabled
Archive Check Enabled
Tape Erase Enabled
Offline content Index Enabled
Online Content Index Enabled
Enabled
Вы можете видеть, что последний возвращенный элемент не имеет значения, но отражает настройку в приложении, которое мы используем, я просто хочу изменить это значение на «Значение 1», например.
Любая помощь очень признательна, я пробовал использовать хэш-таблицы, но понятия не имел, что делаю, несмотря на несколько часов поиска в Google.
Изменить: Мой запрос:
SELECT JM.opName AS 'Activity',
CASE action
WHEN 1 THEN 'Disabled'
WHEN 2 THEN 'Enabled'
END AS 'Setting'
FROM JMJobAction AS J
LEFT JOIN JMJobOperationNames JM on JM.opType = J.opType
WHERE clientId = 1
AND appType = 0
AND J.opType != 8
AND appId = 1
Ответ №1:
В PowerShell вы можете выполнить следующие действия:
$TestQuery = Invoke-Sqlcmd -Database $DB -Query $qcd -ServerInstance "SomeInstanceInstance1"
$TestQuery |
Where { [string]::IsNullOrEmpty($_.Activity) } | Foreach-Object {
$_.Activity = 'Value1' # Update all empty or nulls with Value1
}
$TestQuery # Contains updated results
Обратите внимание, что это не обновляет фактическую базу данных. Вам понадобится отдельный запрос, который будет выполнять обратную запись в базу данных.
Когда таблица базы данных содержит a NULL
, она интерпретируется как System.DBNull
тип данных в PowerShell. [System.DBNull]::Value
это не то же $null
самое, что . Поэтому, если вы хотите только запросить NULL
значения, то ваш запрос можно было бы более уместно изменить следующим образом:
$TestQuery | Where Activity -is [DBNUll]
Комментарии:
1. Я где-то читал, что значение DB Null-это не то же самое, что $null. Но большое вам спасибо, это решило проблему, с которой я столкнулся, я не мог понять, как это сделать в SQL — запросе, но это следующая лучшая вещь.
Ответ №2:
Я не знаю, правильно ли я понял ваш вопрос. Я понимаю, что вы хотите иметь значение по умолчанию, когда в столбце нет данных.
Это может быть решено в вашем SQL — запросе с case
помощью . Вот пример
[Редактировать] На основе вашего добавленного запроса
SELECT
CASE
WHEN JM.opName is null OR JM.opName = '' THEN "DefaultActivity"
ELSE JM.opName
END AS Activity,
CASE action
WHEN 1 THEN 'Disabled'
WHEN 2 THEN 'Enabled'
END AS 'Setting'
FROM JMJobAction AS J
LEFT JOIN JMJobOperationNames JM on JM.opType = J.opType
WHERE clientId = 1
AND appType = 0
AND J.opType != 8
AND appId = 1
Комментарии:
1. Поэтому я не уверен, как добавить это в свой запрос, я добавил свой запрос в свой первый пост, я просто продолжаю нарушать запрос
2. Привет @Майк, я обновил свой ответ. К сожалению, я не могу это проверить, у меня нет такой базы данных 🙂 но попробуйте и дайте мне знать, если будут ошибки