Динамический TSQL-запрос с вложенным циклом - PullRequest
0 голосов
/ 11 марта 2019

Я создал систему тестов на основе интрасети, используя SQL-сервер в качестве бэкэнда.Результаты тестов хранятся в отдельных таблицах, по одному на каждый тест.Сотрудники будут иметь доступ только к некоторым или ко всем тестам, в зависимости от их положения.Я пытаюсь определить, как лучше всего выполнить запрос, который будет суммировать или суммировать количество проверок, выполненных каждым человеком, и сравнить его с заранее определенным количеством назначенных ему проверок.Как только два числа совпадают, они считаются законченными, и я могу экспортировать окончательные результаты в другую БД.

Я попытался использовать цикл VBS, чтобы пройтись по таблицам викторин и проверить результаты каждого, но я не могупохоже, что он работает должным образом, так как он полагается на циклический просмотр каждой записи сотрудника, а затем повторение всех имен таблиц, назначенных каждому.Я заканчиваю циклом начальный запрос, а не вторичный запрос, чтобы получить счет:

Set rs = CreateObject("ADODB.Recordset")
rs.CursorLocation = 3

rs.Open "Select v.emp_num, v.position, p.group_id From ValidApplicants as v, Positions as p Where v.complete = 0 and v.notified = 0 And v.position = p.Position", conn
RSCount = rs.RecordCount

i = 0
Do until i = RSCount
    strempNum = rs("emp_num")
    strPosition = rs("position")
    strGroupID = rs("group_id")

    Set rs2 = CreateObject("ADODB.Recordset")
    rs2.CursorLocation = 3

    rs2.Open "Select quiz_name, tblname, quiz_code From quizfilter Where group_id in (1, "& strGroupID &")",conn
    recCount = rs2.RecordCount

    x = 0
    Do until x = recCount
        strQuizName = rs2("quiz_name")
        strTable = rs2("tblname")
        strCode = rs2("quiz_code")

        Set rez = CreateObject("ADODB.Recordset")
        rez.CursorLocation = 3

        j = 0
        Do until j = recCount
            rez.Open "SELECT (SELECT COUNT(*) FROM "& strTable &" WHERE 
            pass_fail = 1 And employee_num = 7275) AS SumCount"
            j = j + 1
        Loop

        Set rez2 = CreateObject("ADODB.Recordset")
        rez2.CursorLocation = 3
        rez2.Open "Select quiz_count From QuizGroups Where group_id = "& strGroupID &"",conn
        if not (rez2.eof) then
            strQuizCount = rez2("quiz_count")
        end if

        rs2.MoveNext
        x = x + 1
    Loop

    if not users_eof then
        for record=0 to UBound(dataArray,2)
            strtheCount = dataArray(user_score,record)
        Next

        if (strtheCount = strQuizCount) then
            Wscript.Echo "Count is "& strQuizCount &""
        end if
    end if

    rs2.close
    set rs2 = nothing

    rs.MoveNext
    i = i + 1
Loop

Если кто-то может указать мне правильное направление, возможно, есть способ достичь этого с помощью динамического запросав хранимой процедуре SQL?

Большое спасибо

1 Ответ

0 голосов
/ 12 марта 2019

Спасибо за идею Tomalak, мне удалось добиться этого, обновив все оценки викторины до общей таблицы, на которую я могу сослаться сейчас, чтобы определить, выполнил ли каждый пользователь необходимое количество тестов.

Iцени помощь!

...