Itgensql056: foutmelding bij het kopiëren van Exact Online database naar Azure SQL

Wij willen een kopie maken van een Exact Online database naar een Azure SQL database. Wij zijn als accountant gekoppeld aan de administratie van de klant. Wij hebben een accountancy licentie (Exact Online Boekhouding Plus licentie).
In Query Tool zie ik wel de administraties van de klant (en ook onze Azure SQL server) maar als ik de onderstaande sql statement probeer uit te voeren krijg ik een foutmelding (zie hieronder de foutmelding). Deze SQL statement werkt goed bij andere klanten van ons waar wij een eigen account hebben in de administratie van de klant maar niet wanneer wij als accountant toegevoegd zijn in de administratie. Graag horen wij wat wij fout doen. Moet de SQL statement anders?

SQL Statement

use [sgtt]@sql

use all@eol

create or replace table EolTransactionLinesIncremental@sql
as
select *
from TransactionLinesIncremental@eol

Foutmelding

Syntax error between the two ‘***’ on line 3, column 0:

use [sgtt]@sqluse all@eolcreate or replace tab…

Error: mismatched input ‘use’ expecting {, ‘;’}.

Op welke wijze is dit ingevoerd als SQL-statement?

Het oogt alsof het geheel als 1 statement uitgevoerd wordt in plaats van losse statements zoals de witregels aangeven.

Als het 1 statement moet zijn, gelieve dan een zogenaamde “SQL batch” te maken (zie Invantive SQL Grammar v22.1). Scheidt hierbij de statements met een “;” of maak er een PSQL-block van zoals:

begin
  stmt1;
  stmt2;
end;

Tip: voeg altijd de itgenXXX999-foutcode toe aan een vraag. Hiermee is vaak sneller te achterhalen en terug te vinden.

Ik heb wat zaken gewijzigd op basis van je hebt aangegeven maar krijg nu een andere foutmelding.
Het lijkt alsof de tabellen niet gevonden worden (zie foutmelding itgengpr015 hieronder).

Misschien heeft het ermee te maken dat wij als accountant zijn toegevoegd in Exact Online-omgeving van deze klant. Deze tabellen kunnen wij vinden als wij voor een andere klant de Exact Online-database willen kopiëren. Bij deze andere klant hebben een eigen account (met two factor identification).

Foutmelding:

itgengpr015
Statement #3 ‘create or rep…ncremental@eol’ starting on line 5 caused an error.

Unknown table ‘ACCOUNTSINCREMENTAL’. Possible valid alternatives: AccountsIncremental, ExactOnlineREST.Incremental.GLAccountsIncremental, ExactOnlineREST.Incremental.AccountsIncremental.

Ik heb reeds geprobeerd om het SQL statement door naar ExactOnlineREST.Incremental.GLAccountsIncremental te verwijzen in plaats van ACCOUNTSINCREMENTAL zoals de foutmelding suggreert maar zonder succes.

Is het mogelijk om de nieuwe SQL-statements toe te voegen?

Is het mogelijk om expliciet aan te geven (schermafdruk en gebruikte toetsen/klikactie) hoe de code uitgevoerd wordt?

Zie hieronder de SQL code

use [agtt]@sql;
use all@eol;

create or replace table NtntAccountsIncremental@sql
as
select * 
from   AccountsIncremental@eol;
create or replace table NtntItemsIncremental@sql
as
select * 
from   ItemsIncremental@eol;

Om de code uit te voeren klik ik “Execute All”. Hierna krijg ik de onderstaande foutmelding:

itgengpr015
Statement #3 ‘create or rep…cremental@eol;’ starting on line 5 caused an error.

Unknown table ‘ACCOUNTSINCREMENTAL’. Possible valid alternatives: AccountsIncremental, ExactOnlineREST.Incremental.GLAccountsIncremental, ExactOnlineREST.Incremental.AccountsIncremental.

Onder de details staat het volgende:

itgengpr015: Statement #3 ‘create or rep…cremental@eol;’ starting on line 5 caused an error.

Unknown table ‘ACCOUNTSINCREMENTAL’. Possible valid alternatives: AccountsIncremental, ExactOnlineREST.Incremental.GLAccountsIncremental, ExactOnlineREST.Incremental.AccountsIncremental.

Message ID: 0842a935-83f5-4cce-9684-77a4d55d0697

Occurred (UTC): 23/10/2023 12:14:03

create or replace table NtntAccountsIncremental@sql
as
select *
from AccountsIncremental@eol;

ValidationException
ValidationException
at Invantive.Basics.ValidationException…ctor(GlobalState owner, ExecutionOptions executionOptions, String messageCode, String errorMessage, String kindRequest, String localStackTrace, String nk, Exception innerException, Boolean inheritMessageCodeWhenPresent, Nullable1 uid, Boolean isRecoverable, String poolIdentityId, String url, Nullable1 partyUid)
at Invantive.Data.DataContainerMetadata.ThrowErrorForUnknownTable(GlobalState owner, ExecutionOptions executionOptions, IProviderManager manager, String fullyQualifiedName)
at Invantive.Data.Providers.ExactOnline.ExactOnlineProvider.ThrowErrorForUnknownTable(GlobalState owner, ExecutionOptions executionOptions, String fullyQualifiedName)
at Invantive.Sql.V1.DataSourceOrFunctionWithRotatorTree.OnExecute(GlobalState owner, ExecutionOptions executionOptions, ParameterList parameters, QueryObject additionalFilters, ExpressionParser expressionParser)
at Invantive.Sql.V1.QueryTree.Execute(GlobalState owner, ExecutionOptions executionOptions, ParameterList parameters, QueryObject additionalFilters, ExpressionParser expressionParser)
at Invantive.Sql.V1.SelectStatementTree.OnExecute(GlobalState owner, ExecutionOptions executionOptions, ParameterList parameters, QueryObject additionalFilters, ExpressionParser expressionParser)
at Invantive.Sql.V1.QueryTree.Execute(GlobalState owner, ExecutionOptions executionOptions, ParameterList parameters, QueryObject additionalFilters, ExpressionParser expressionParser)
at Invantive.Sql.V1.DdlStatementTree.OnExecute(GlobalState owner, ExecutionOptions executionOptions, ParameterList parameters, QueryObject additionalFilters, ExpressionParser expressionParser)
at Invantive.Sql.V1.QueryTree.Execute(GlobalState owner, ExecutionOptions executionOptions, ParameterList parameters, QueryObject additionalFilters, ExpressionParser expressionParser)
at Invantive.Sql.V1.QueryPlan.ForcePlan(GlobalState owner, ExecutionOptions executionOptions)
at Invantive.Sql.V1.QueryPlan.Fetch(GlobalState owner, ExecutionOptions executionOptions, String sqlStatement)
at Invantive.Data.ConnectionManager.QJ.N(QueryPlan )
at System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext() at System.Linq.Buffer1…ctor(IEnumerable1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable1 source)
at Invantive.Data.ConnectionManager.ExecuteAndCombineQueryPlansV1(GlobalState owner, ExecutionOptions executionOptions, QueryPlan queryPlans, String sqlStatement, ParameterList parameters)
at Invantive.Data.ConnectionManager.ExecuteProviderPassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
at Invantive.Data.ConnectionManager.PassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
at Invantive.Data.ActionProceduresBase.PassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters)
at Invantive.Producer.Windows.Forms.QueryToolResults.DFR(GlobalState , ExecutionOptions , IProgressNotifier , String , ParameterList , Boolean , Boolean , Boolean , Boolean )
at Invantive.Producer.Windows.Forms.QueryToolResults.CFR(GlobalState , ExecutionOptions , String , String , Boolean )
at Invantive.Producer.Windows.Forms.QueryToolResults.ExecuteStatements(GlobalState owner, ExecutionOptions executionOptions)
at Invantive.Producer.Windows.Forms.QueryToolDocumentViewModel.JV.DV.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine](TStateMachine& stateMachine)
at Invantive.Producer.Windows.Forms.QueryToolDocumentViewModel.JV.P()
at System.Threading.Tasks.Task1.InnerInvoke() at System.Threading.Tasks.Task.Execute() at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot) at System.Threading.Tasks.Task.ExecuteEntry(Boolean bPreventDoubleExecution) at System.Threading.ThreadPoolWorkQueue.Dispatch() at Invantive.Data.DataContainerMetadata.ThrowErrorForUnknownTable(GlobalState owner, ExecutionOptions executionOptions, IProviderManager manager, String fullyQualifiedName) at Invantive.Data.Providers.ExactOnline.ExactOnlineProvider.ThrowErrorForUnknownTable(GlobalState owner, ExecutionOptions executionOptions, String fullyQualifiedName) at Invantive.Sql.V1.DataSourceOrFunctionWithRotatorTree.OnExecute(GlobalState owner, ExecutionOptions executionOptions, ParameterList parameters, QueryObject additionalFilters, ExpressionParser expressionParser) at Invantive.Sql.V1.QueryTree.Execute(GlobalState owner, ExecutionOptions executionOptions, ParameterList parameters, QueryObject additionalFilters, ExpressionParser expressionParser) at Invantive.Sql.V1.SelectStatementTree.OnExecute(GlobalState owner, ExecutionOptions executionOptions, ParameterList parameters, QueryObject additionalFilters, ExpressionParser expressionParser) at Invantive.Sql.V1.QueryTree.Execute(GlobalState owner, ExecutionOptions executionOptions, ParameterList parameters, QueryObject additionalFilters, ExpressionParser expressionParser) at Invantive.Sql.V1.DdlStatementTree.OnExecute(GlobalState owner, ExecutionOptions executionOptions, ParameterList parameters, QueryObject additionalFilters, ExpressionParser expressionParser) at Invantive.Sql.V1.QueryTree.Execute(GlobalState owner, ExecutionOptions executionOptions, ParameterList parameters, QueryObject additionalFilters, ExpressionParser expressionParser) at Invantive.Sql.V1.QueryPlan.ForcePlan(GlobalState owner, ExecutionOptions executionOptions) at Invantive.Sql.V1.QueryPlan.Fetch(GlobalState owner, ExecutionOptions executionOptions, String sqlStatement) at Invantive.Data.ConnectionManager.QJ.N(QueryPlan ) at System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext()
at System.Linq.Buffer1..ctor(IEnumerable1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Invantive.Data.ConnectionManager.ExecuteAndCombineQueryPlansV1(GlobalState owner, ExecutionOptions executionOptions, QueryPlan queryPlans, String sqlStatement, ParameterList parameters)
at Invantive.Data.ConnectionManager.ExecuteProviderPassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Invantive.Data.ConnectionManager.ExecuteProviderPassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
at Invantive.Data.ConnectionManager.PassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Invantive.Data.ConnectionManager.PassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
at Invantive.Data.ActionProceduresBase.PassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters)
at Invantive.Producer.Windows.Forms.QueryToolResults.DFR(GlobalState , ExecutionOptions , IProgressNotifier , String , ParameterList , Boolean , Boolean , Boolean , Boolean )
at Invantive.Producer.Windows.Forms.QueryToolResults.CFR(GlobalState , ExecutionOptions , String , String , Boolean )

In dit geval worden meerdere schrijfwijzes doorelkaar gebruikt waardoor de foutmelding optreedt.

Binnen Invantive Query Tool zal de geselecteerde tekst (alle tekst als niks specifiek geselecteerd) eerst opgehakt worden in losse statementreeksen. Elke losse statementreeks wordt achtereenvolgens los van elkaar aangeboden aan de SQL-engine als een SQL-statement. In dit geval zal dit altijd UniversalSQL zijn, maar het kan ook gebruikt worden in native mode voor bijvoorbeeld Teradata.

Advies is de code als volgt te noteren voor gebruiken binnen Invantive Query Tool:

use [agtt]@sql

use all@eol

create or replace table NtntAccountsIncremental@sql
as
select * 
from   AccountsIncremental@eol

create or replace table NtntItemsIncremental@sql
as
select * 
from   ItemsIncremental@eol

Als 1 PSQL-block kan ook:

begin
  use [agtt]@sql;
  use all@eol;
  create or replace table NtntAccountsIncremental@sql
  as
  select * 
  from   AccountsIncremental@eol
  ;
  create or replace table NtntItemsIncremental@sql
  as
  select * 
  from   ItemsIncremental@eol
  ;
end;

Beide benaderingen hebben weer unieke eigenschappen waardoor soms de een of de ander handiger is, maar in dit geval is advies de eerste variant te gebruiken.

Dank voor de snelle reactie. Ik heb beide schrijfwijzes uitgeprobeerd maar krijg helaas weer een foutmelding.

Bij de eerste variant is de foutmelding dezelfde als voorheen:

itgengpr015
Statement #3 ‘create or rep…ncremental@eol’ starting on line 5 caused an error.

Unknown table ‘ACCOUNTSINCREMENTAL’. Possible valid alternatives: AccountsIncremental, ExactOnlineREST.Incremental.GLAccountsIncremental, ExactOnlineREST.Incremental.AccountsIncremental

Bij de tweede variant krijg ik een net andere foutmelding:

itgengpr015
Statement #1 ‘begin
use …eol
;
end;’ starting on line 1 caused an error.

Unknown table ‘ACCOUNTSINCREMENTAL’. Possible valid alternatives: AccountsIncremental, ExactOnlineREST.Incremental.GLAccountsIncremental, ExactOnlineREST.Incremental.AccountsIncremental.

Advies is om te controleren dat “Include REST API” aangevinkt is in het aanmeldscherm.

Zie voor een voorbeeld:

Indien de REST API’s niet geactiveerd zijn, dan zullen deze tabelnamen een foutmelding geven.

Dit topic is 7 dagen na het laatste antwoord automatisch gesloten. Nieuwe antwoorden zijn niet meer toegestaan.