У меня есть загрузчик для автоматической загрузки данных, который запускается с использованием скрипта (загрузчик, содержащий указанный скрипт был batchautoload.cmd
).
cd C:\file\loader\
C:\file\loader\load.exe /appID=1234 /username=admin /process="load" /initialDate=T1 /finalDate=T2
У меня есть запрос, чтобы определить, в каких данных нет загруженныхиспользование описанного выше процесса из-за сбоя или т. д., как показано ниже.
declare @initdate as varchar(20)
declare @lastdate as varchar(20)
declare @location as varchar(20)
set @initdate = CONVERT(date,GETDATE()-1);
set @lastdate = CONVERT(date,GETDATE());
set @location = 'xxxx%'
;with q(a, c) as
(
select MIN(date), MAX(date)
from Table_Loader
where nameplace like @location
and date >= @initdate
and date <= @lastdate
union all
select DATEADD(hour,1,a), c
from q
where a < c
)
select *
from q
where a not in
(
select date
from Table_Loader
where nameplace like @location
and date >= @initdate
and date <= @lastdate
)
order by a asc
OPTION (MAXRECURSION 0)
"
Теперь мой вопрос заключается в том, можно ли каким-либо образом передавать результаты из запроса в сценарий, где сценарий "/ initialdate = queryresulttime / finaldate = queryresulttime + +1 "?
У меня есть общее представление об использовании консоли VB, где:
- моя консоль будет запускать запрос из БД
- перенести запрос результата в скрипт (застрялздесь)
- автоматически запустит сценарий, созданный на шаге № 2.
Шаг # 1
Module Module1
Dim sqCon As New SqlClient.SqlConnection("Server=10.10.111.11;Database=DataBaseMain1;Connection Timeout=50;Trusted_Connection=Yes;")
Dim sqCmd As New SqlClient.SqlCommand
Dim sdrRow As SqlClient.SqlDataReader
Sub Main()
sqCmd.Connection = sqCon
sqCmd.CommandText =
"
declare @initdate as varchar(20)
declare @lastdate as varchar(20)
declare @location as varchar(20)
set @initdate = CONVERT(date,GETDATE()-1);
set @lastdate = CONVERT(date,GETDATE());
set @location = 'xxxx%'
;with q(a, c) as
(
select MIN(date), MAX(date)
from Table_Loader
where nameplace like @location
and date >= @initdate
and date <= @lastdate
union all
select DATEADD(hour,1,a), c
from q
where a < c
)
select *
from q
where a not in
(
select date
from Table_Loader
where nameplace like @location
and date >= @initdate
and date <= @lastdate
)
order by a asc
OPTION (MAXRECURSION 0)
"
sqCon.Open()
sqCmd.ExecuteNonQuery()
sdrRow = sqCmd.ExecuteReader()
For Each itm In sdrRow
Dim column0 As String = sdrRow.GetValue(0)
MsgBox(column0)
Next
sdrRow.Close()
sqCon.Close()
End Sub
End Module
Теперь я могу сгенерировать процесс # 1, ноне № 2, а № 3.Поскольку данные будут использоваться в скрипте, я думаю о создании временного файла пакета (появляются, когда запущена только эта консоль, удаляется после завершения консоли).Поскольку я не хочу создавать много файлов из консоли.
Я новичок в консоли VB, поэтому я ограничиваю свою идею, чтобы решить эту проблему.Я слышал о «трубе», но не знаю, как это сделать.Я все еще думаю о продолжении цикла For Each
или цикла For
, но застрял на этом.Пожалуйста, посоветуй мне.Просто чтобы сообщить, я планирую внедрить эту консоль для ежедневного запуска.