Mssql String

Vinos

Customer
Mitglied seit
19. Oktober 2022
Beiträge
3
Hallo,

bin gerade dabei unsere SAP Business One Datenbank MsSql an die 3cx anzubinden.
Komme aber leider nicht richtig weiter.

Bekomme immer den Fehler: Incorrect syntax near the keyword 'WHERE'.

Vermute, dass es an dem inner join liegt komme aber auf keine Lösung.

Started scenario with empty id
Request text: ConnectionString: Server=91.106.126.68;Database=SAP_VB_DB01;User Id=XXX_RO;Password=XXX;
Statement: SELECT CardCode AS contactid, FirstName AS firstname, LastName AS lastname, CardName AS companyname, E_MailL AS email, Cellolar AS phonemobile, Cellular AS phonemobile2, Tel1 AS phonehome, Tel2 AS phonehome2, Phone1 AS phonebusiness, Phone2 AS phonebusiness2 FROM ocpr inner join ocrd WHERE Cellolar '%488188%' or Cellular like '%488188%' or Tel1 LIKE '%488188%' or Tel2 like '%488188%' or Phone1 like '%488188%' or Phone2 like '%488188%'

System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near the keyword 'WHERE'.
at System.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__126_0(Task`1 result)
at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location ---
at CrmIntegration.SqlDatabaseClient.Execute(String statement, CancellationToken token)
at CrmIntegration.ScenarioProcessorBase.ProcessSQLDatabaseQuery(ISQLClientFactory sqlClientFactory, ScenarioQuery query, IValueManager customManager, CancellationToken token)
at CrmIntegration.ScenarioProcessorBase.ProcessScenario(ProtocolScenario scenario, IValueManager customManager, CancellationToken token)
at CrmIntegration.ScenarioProcessorBase.Execute(ProtocolScenario scenario, CancellationToken token)
at CrmIntegration.CrmProcessor.GetContactInfoFromCrm(List`1 result, IEnumerable`1 scenariosToProcess, IValueManager customManager, Func`2 filterResultsFunctor, Func`1 createContactRecordFunctor, CancellationToken token)
at CrmIntegration.CrmProcessor.GetContactInfo(String contactNumber, InteractionTypes interactionType, CancellationToken token)
ClientConnectionId:30ed0e4c-2d25-49ed-a782-9a151ac2ee35
Error Number:156,State:1,Class:15
 
WHERE Cellolar '%488188%'
Fehlt da nicht ein LIKE?

Die 3CX wird das join nicht interessieren, das geht nur den SQL Server etwas an. Vielleicht fehlt da aber noch ein Auswahlkriterium bei deinem join, keine Ahnung wie deine Tabellen da diesbzgl. aussehen. Sonst den inner join durch ein ocpr.pkey = ocrd.fkey (beispielhaft) gleich hinter das where setzen, den or Rest mit and in einer Klammer dahinter.
 
Zuletzt bearbeitet:
Ja stimmt da fehlte ein like. Leider ändert das an der Fehlermeldung nichts.

Ich brauche beide Tabellen OCPR (Geschäftspartner) und OCRD (Ansprechpartner) und ich verstehe nicht wie ich beide einbeziehe.
 
Haben beide Tabellen eine Beziehung zueinander (der pkey der einen wird in der anderen als fkey verwendet, ein join über diesen key)? Gibt es eine andere (dritte) Tabelle, welche u.a. die Beziehung zu diese beiden Tabellen (je deren pkey als fkey, ein join über drei Tabellen mit join auf diese keys) hält? Enthalten beide Tabellen (je andere) Daten in den gleichen Spalten, aber stehen in keiner Beziehung direkt oder indirekt miteinander (ein union, evtl. mit group und having)? Gibt es einen View in der DB, welcher die benötigten Daten aus beiden Tabellen aggregiert enthält?

Wer bei euch hat denn Ahnung davon bzw. das DB System an dieser Stelle entwickelt?
 
Kommt das hier vielleicht der Antwort der Verknüpfung dieser beiden Tabellen bei euch näher?
 
Die Datenbank wird von SAP vorgegeben.
Kommt das hier vielleicht der Antwort der Verknüpfung dieser beiden Tabellen bei euch näher?
Ja das sieht sehr nach einer Abfrage aus dem SAP aus.

Hier wäre eine Abfrage die ich aus dem SAP generiert habe mit allen Informationen, die ich brauche:

SELECT T1.[CardCode] AS 'GP-Code', T0.[FirstName] AS 'Vorname', T0.[LastName] AS 'Nachname', T0.[E_MailL] AS 'E-Mail', T1.[Phone1] AS 'Telefon 1', T1.[Phone2] AS 'Telefon 2', T1.[Cellular] AS 'Mobiltelefon', T0.[Tel1] AS 'Telefon 1', T0.[Tel2] AS 'Telefon 2', T0.[Cellolar] AS 'Mobiltelefon' FROM [dbo].[OCPR] T0 INNER JOIN [dbo].[OCRD] T1 ON T1.[CardCode] = T0.[CardCode]

Bei dem Ergebnis kommen natürlich mehrere Treffer für einen GP-Code wenn mehrere Ansprechpartner vorhanden sind. Eine eigene Id von den Ansprechpartnern gibt es nicht wirklich. Das ist nochmal ein Feld "Name"

Hier nochmal die Abfrage mit dem Feld "Name"

SELECT T1.[CardCode] AS 'GP-Code', T0.[FirstName] AS 'Vorname', T0.[LastName] AS 'Nachname', T0.[E_MailL] AS 'E-Mail', T1.[Phone1] AS 'Telefon 1', T1.[Phone2] AS 'Telefon 2', T1.[Cellular] AS 'Mobiltelefon', T0.[Tel1] AS 'Telefon 1', T0.[Tel2] AS 'Telefon 2', T0.[Cellolar] AS 'Mobiltelefon', T0.[Name] AS 'Name d. Ansprechpartners' FROM [dbo].[OCPR] T0 INNER JOIN [dbo].[OCRD] T1 ON T1.[CardCode] = T0.[CardCode]

Hatte versucht die obige Abfrage so umzubauen, dass sie für die 3cx passt. Aber meine Fähigkeiten reichen hier nicht aus.
 

Statistik des Forums

Themen
44.750
Beiträge
233.642
Mitglieder
78.492
Neuestes Mitglied
dirk.kuttler