Inanzi tutto ti ringrazio tantissimo per il supporto
Avevo provato con l'utilizzo di UNION nella query ma siccome le tabelle non sono identiche mi restituice
""All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists.""
Ho compreso l'errore nella dichiarazione
Attuale codice funzionante
In questa funzione cero il numero di telefono lo cerco prima in una tabella e solo se non lo trovo lo cero nella seconda, restituisco solo un valore anche in caso ne trovi più di uno quindi restituisco il primo perchè chi riceve la richiesta si aspetta un solo valore
async function getContactByPhone(phoneNumber) {
try {
await sql.connect(config);
const result1 = await sql.query`
SELECT Codice, RagioneSociale, TEL1, TEL2, TELCASA1, CELL1, FAX1, EMAIL1
FROM Connector.AnagraficaConnector
WHERE TEL1 LIKE '%' + ${phoneNumber} + '%'
OR TEL2 LIKE '%' + ${phoneNumber} + '%'
OR TELCASA1 LIKE '%' + ${phoneNumber} + '%'
OR CELL1 LIKE '%' + ${phoneNumber} + '%'
OR FAX1 LIKE '%' + ${phoneNumber} + '%'
`;
if(result1.recordset.length < 1)
{
const result2 = await sql.query`
SELECT Codice, RagioneSociale, Referente, Ruolo, TEL1, TEL2, TELCASA1, CELL1, FAX1, EMAIL1
FROM Connector.ReferenteConnector
WHERE TEL1 LIKE '%' + ${phoneNumber} + '%'
OR TEL2 LIKE '%' + ${phoneNumber} + '%'
OR TELCASA1 LIKE '%' + ${phoneNumber} + '%'
OR CELL1 LIKE '%' + ${phoneNumber} + '%'
OR FAX1 LIKE '%' + ${phoneNumber} + '%'
`;
if(result2.recordset.length < 1)
{
return { status: 404, data: { message: 'valore non trovato' } };
}
else
{
return { status: 200, data: result2.recordset[0] };
}
}
else
{
return { status: 200, data: result1.recordset[0] };
}
} catch (err) {
return { status: 500 , data: { message: err.message}};
} finally {
sql.close();
}
}
In questa funzione invece cerco il numero prima in una tabella poi nell'altra e restituisco tutti i valori trovati.
async function getContactByPhone(phoneNumber) {
try {
await sql.connect(config);
const result1 = await sql.query`
SELECT Codice, RagioneSociale, TEL1, TEL2, TELCASA1, CELL1, FAX1, EMAIL1
FROM Connector.AnagraficaConnector
WHERE TEL1 LIKE '%' + ${phoneNumber} + '%'
OR TEL2 LIKE '%' + ${phoneNumber} + '%'
OR TELCASA1 LIKE '%' + ${phoneNumber} + '%'
OR CELL1 LIKE '%' + ${phoneNumber} + '%'
OR FAX1 LIKE '%' + ${phoneNumber} + '%'
`;
if(result1.recordset.length < 1)
{
const result2 = await sql.query`
SELECT Codice, RagioneSociale, Referente, Ruolo, TEL1, TEL2, TELCASA1, CELL1, FAX1, EMAIL1
FROM Connector.ReferenteConnector
WHERE TEL1 LIKE '%' + ${phoneNumber} + '%'
OR TEL2 LIKE '%' + ${phoneNumber} + '%'
OR TELCASA1 LIKE '%' + ${phoneNumber} + '%'
OR CELL1 LIKE '%' + ${phoneNumber} + '%'
OR FAX1 LIKE '%' + ${phoneNumber} + '%'
`;
if(result2.recordset.length < 1)
{
return { status: 404, data: { message: 'valore non trovato' } };
}
else
{
return { status: 200, data: result2.recordset[0] };
}
}
else
{
return { status: 200, data: result1.recordset[0] };
}
} catch (err) {
return { status: 500 , data: { message: err.message}};
} finally {
sql.close();
}
}
Molto probabilmente le due funzioni potrebbero essere accorpate in una con una variabile booleana che mi gestisce il comportamente quindi true cerca tutti i contatti false solo uno. Ma intanto sono contento del risultato ottenuto