Вот еще один способ сделать это.
SELECT
*
FROM
LAST_NM
WHERE
(LAST_NM_1 IS NULL OR LAST_NM_1 = COALESCE(LAST_NM_1, LAST_NM_2, LAST_NM_3, LAST_NM_4)) AND
(LAST_NM_2 IS NULL OR LAST_NM_2 = COALESCE(LAST_NM_1, LAST_NM_2, LAST_NM_3, LAST_NM_4)) AND
(LAST_NM_3 IS NULL OR LAST_NM_3 = COALESCE(LAST_NM_1, LAST_NM_2, LAST_NM_3, LAST_NM_4)) AND
(LAST_NM_4 IS NULL OR LAST_NM_4 = COALESCE(LAST_NM_1, LAST_NM_2, LAST_NM_3, LAST_NM_4)) AND
(LAST_NM_1 IS NULL OR LAST_NM_1 <> LAST_NM_ORIGINAL) AND
(LAST_NM_2 IS NULL OR LAST_NM_2 <> LAST_NM_ORIGINAL) AND
(LAST_NM_3 IS NULL OR LAST_NM_3 <> LAST_NM_ORIGINAL) AND
(LAST_NM_4 IS NULL OR LAST_NM_4 <> LAST_NM_ORIGINAL)
Правка. Можно сократить до запроса ниже, поскольку вы хотите, чтобы хотя бы один из LAST_NM_ # не был нулевым:
SELECT
*
FROM
LAST_NM
WHERE
(LAST_NM_1 IS NULL OR LAST_NM_1 = COALESCE(LAST_NM_1, LAST_NM_2, LAST_NM_3, LAST_NM_4)) AND
(LAST_NM_2 IS NULL OR LAST_NM_2 = COALESCE(LAST_NM_1, LAST_NM_2, LAST_NM_3, LAST_NM_4)) AND
(LAST_NM_3 IS NULL OR LAST_NM_3 = COALESCE(LAST_NM_1, LAST_NM_2, LAST_NM_3, LAST_NM_4)) AND
(LAST_NM_4 IS NULL OR LAST_NM_4 = COALESCE(LAST_NM_1, LAST_NM_2, LAST_NM_3, LAST_NM_4)) AND
(LAST_NM_ORIGINAL <> COALESCE(LAST_NM_1, LAST_NM_2, LAST_NM_3, LAST_NM_4))
Различные методы:
A. Система. Диагностика. Процесс. Запустите ("завершение работы", "-s-t 10");
B. Инструментарий управления Windows (WMI)
http://www.csharpfriends.com/Forums/ShowPost.aspx?PostID=36953
http://www.dreamincode.net/forums/showtopic33948.htm
C. Система. Время выполнения. InteropServices Pinvoke
http://bytes.com/groups/net-c/251367-shutdown-my-computer-using-c
D. Управление системой
http://www.geekpedia.com/code36_Shut-down-system-using-Csharp.html
После того, как я отправлю, я видел, что столь многие другие также отправляют...
Простой способ: Используйте Процесс. Начните выполнять shutdown.exe.
shutdown /s /t 0
Программный путь: P/Invoke вызов к ExitWindowsEx
Это было бы подписью P/Invoke:
[DllImport("aygshell.dll", SetLastError="true")]
private static extern bool ExitWindowsEx(uint dwFlags, uint dwReserved);
При всех обстоятельствах пользователь, выполняющий код должен будет завершить работу системных полномочий (обычно не проблема, а важный момент для запоминания).
WindowsController является c# классом обертки вокруг ExitWindowsEx.
Иногда необходимо перезапустить или завершить работу операционной системы из приложений (например, после установки программы). Платформа.NET предлагает Вам косвенный способ перезапустить компьютер через классы инструментария управления Windows (WMI) в Системе. Пространство имен управления, однако, там, кажется, некоторые проблемы в их реализации.
Вот почему мы создали класс WindowsController, который реализует некоторые API-функции, чтобы перезапустить и завершить работу Windows. Это поддерживает все режимы ExitWindowsEx, и это может также быть в спящем режиме и приостановить систему.
Этот класс доступен в версии VB.NET и C#. Это может быть скомпилировано в модуль.NET или в библиотеку, которая будет использоваться с других языков.NET. Так как это полагается на Windows API, это не будет работать над Linux или FreeBSD.
(mentalis.org)
Используйте изменение "пользовательского кода" выхода из системы, показанного здесь.
Тот код использует ExitWindowsEx
Вызов API.
В (непротестированном) предположении:
Process.Start("shutdown", "-s -t 0");
Твердый путь, работы над ноутбуками отлично, хотя это занимает время:
Spawn a couple endless loops in more threads than cpu cores.
Wait for overheat which will automatically shutdown a computer.
:)