2016-06-02 4 views
0

Я пытаюсь использовать SQL Server 2012, работающий в Windows Server 2012 R2, для обновления связанного сервера Filemaker 13. Мои выбранные запросы и обновления/вставки в мои таблицы SQL Server из Filemaker работают. Однако, когда я пытаюсь обновить FileMaker с SQL Server я получаю следующее сообщение об ошибке:Транзакция не может иметь несколько наборов записей с этой ошибкой типа курсора Обновление Filemaker Linked Server из SQL Server 2012

OLE DB provider "MSDASQL" for linked server "CET_REGISTRATIONS" returned message "Unspecified error". 
OLE DB provider "MSDASQL" for linked server "CET_REGISTRATIONS" returned message 
"Transaction cannot have multiple recordsets with this cursor type. Change the cursor type, commit the transaction, or close one of the recordsets.". 
Msg 7330, Level 16, State 2, Line 1 
Cannot fetch a row from OLE DB provider "MSDASQL" for linked server "CET_REGISTRATIONS". 

Я использую следующий запрос, чтобы выполнить обновление:

update OPENQUERY(CET_REGISTRATIONS, 
        'select "Current", 
          "Term ID", 
          "_kp_ClassByStudentID", 
          "_kr_StudentID", 
          "DE_r_task1", 
          "DE_r_task2", 
          "DE_w_task1", 
          "DE_w_task2", 
          "DE_w_task3", 
          "DE_w_task4", 
          "DE_w_task5", 
          "DE_l_task1", 
          "DE_l_task2", 
          "DE_s_task1", 
          "DE_s_task2", 
          "DE_s_task3", 
          "DE_r_final", 
          "DE_w_final", 
          "DE_l_final", 
          "DE_s_final", 
          "DE_o_final_total" 
        from "Class by Student"') 
       set [DE_r_task1] = CAST(read_test1_Scaled as float), 
        [DE_r_task2] = cast(read_test2_scaled as float), 
        [DE_w_task1] = cast(writ_literatureReview as float), 
        [DE_w_task2] = cast(writ_exposition as float), 
        [DE_w_task3] = cast(writ_groupReport as float), 
        [DE_w_task4] = cast(writ_synthSummary as float), 
        [DE_w_task5] = cast(writ_critEvaluation as float), 
        [DE_l_task1] = cast(list_test1_scaled as float), 
        [DE_l_task2] = cast(list_test2_scaled as float), 
        [DE_s_task1] = cast(speak_groupPres as float), 
        [DE_s_task2] = cast(speak_indivPres as float), 
        [DE_s_task3] = cast(speak_tutorialDiscus as float), 
        [DE_r_final] = cast(read_total as float), 
        [DE_w_final] = cast(writ_total as float), 
        [DE_l_final] = cast(list_total as float), 
        [DE_s_final] = cast(speak_total as float), 
        [DE_o_final_total] = cast(overall_total as float) 
       from OPENQUERY(CET_REGISTRATIONS, 
           'select "Current", 
             "Term ID", 
             "_kp_ClassByStudentID", 
             "_kr_StudentID", 
             "DE_r_task1", 
             "DE_r_task2", 
             "DE_w_task1", 
             "DE_w_task2", 
             "DE_w_task3", 
             "DE_w_task4", 
             "DE_w_task5", 
             "DE_l_task1", 
             "DE_l_task2", 
             "DE_s_task1", 
             "DE_s_task2", 
             "DE_s_task3", 
             "DE_r_final", 
             "DE_w_final", 
             "DE_l_final", 
             "DE_s_final", 
             "DE_o_final_total" 
           from "Class by Student"') filemaker 
       inner join dbo.termData 
       on filemaker.[_kp_ClassByStudentID] = termData.StbyCurrentClassID 
       inner join dbo.DEC10assessmentDataNumeric local_table 
       on local_table.studentID = termData.studentID 
       where local_table.[studentID] = 34114 and local_table.[assessmentLookup] = 3 and 
         termData.[termID] = '316a' 

Я литейный float так, мол, numberfield in Filemaker эквивалентен ODBC SQL_DOUBLE, который является equivalent to SQL Server'sfloat, и я вытягиваю из decimal полей в SQL Server.

У меня есть RPC, RPC Out и Use Remote Collation все включены для связанного сервера, которые, я считаю, необходимы для выполнения обновлений.

Linked server settings

Почему я получаю эту ошибку?

ответ

0

Если вы еще не сделали, посмотрите на руководство FieMaker ODBC:

FileMaker® 15 ODBC and JDBC Guide

Я подозреваю, что запросы на драйвер ODBC должны соответствовать внутреннему синтаксисом FileMaker SQL, который отличается и более ограниченным по сравнению с T-SQL.

Попробуйте упростить запрос, получить результат, а затем добавить дополнительные параметры постепенно.