Возможно, самый простой способ - это outer apply
:
select t.id, t.status, t2.worker, t.date
from t outer apply
(select top (1) t2.*
from t2
where t2.worker is not null and t2.id >= t.id
order by t2.id asc
) t2;
. Что вам действительно нужно, так это опция IGNORE NULLS
в LEAD()
. Однако SQL Server не поддерживает это.
Если вы хотите заполнить последние значения значением , предшествующим значению , следуйте той же логике с другой apply
:
select t.id, t.status,
coalesce(tnext.worker, tprev.worker) as worker, t.date
from t outer apply
(select top (1) t2.*
from t2
where t2.worker is not null and t2.id >= t.id
order by t2.id asc
) tnext outer apply
(select top (1) t2.*
from t2
where t2.worker is not null and t2.id <= t.id
order by t2.id desc
) tprev;
Замена попытки:
retVal = OpSys.Reboot()
С:
retVal = OpSys.Win32Shutdown(6)
Ну, это использует VBScript - хотя правдиво он вызывает то же завершение работы командной строки, которое Вы пытаетесь сделать. Я протестировал его, и это работает.
Dim oShell
Set oShell = CreateObject("WScript.Shell")
'restart, wait 5 seconds, force running apps to close
oShell.Run "%comspec% /c shutdown /r /t 5 /f", , TRUE
Против чего ОС Вы работаете? Этот тест был против XP. Интересно, требует ли сервер ОС кода завершения работы...
Можно также попробовать psShutdown утилиту командной строки от Sysinternals теперь Microsoft. http://technet.microsoft.com/en-us/sysinternals/bb897541.aspx