Ammammata
2024-02-29 14:49:14 UTC
ho preparato tre query pressoché identiche che leggono i dati di una
tabella (Delivery) presente in tre database diversi (stesso gestionale
SBO), corrispondenti a tre filiali della stessa società di gruppo
i primi due db sono sullo stesso server, il terzo è su uno diverso
quando le eseguo singolarmente funzionano senza problemi
se unisco i db 1 e 2, quelli che stanno sullo stesso server funziona
quando accodo anche il terzo ho questo errore:
Msg 245, Level 16, State 1, Line 2
Conversion failed when converting the nvarchar value 'Nome della ditta
DUE' to data type int.
(nota il DUE)
Google dice che "the common reason is that you are trying to convert,
either implicitly or explicitly, a varchar value to an int data type
and the varchar value cannot be converted to an int data type"
la prima domanda è: cosa significa Line 2 nel messaggio di errore?
nella query la riga 2 è vuota, è parte dei commenti iniziali che
spiegano la rava e la fava
se prendo la riga 2 del codice SQL vero è una semplice assegnazione di
testo a una variabile: 'Ditta1' as dbSAP
SELECT
'Ditta1' as dbSAP
i corrispondenti delle altre due qery variano solo per il nome usato:
SELECT
'Ditta2' as dbSAP
e
SELECT
'Ditta2' as dbSAP
A cosa si riferisce quindi quel Line 2 nel messaggio di errore?
Google aiuta un po':
Error number
A one-to-five-digit number that identifies the message. Error numbers
for user-defined messages can contain more digits.
Description
A Unicode string that contains information about the condition that
generated the message.
Severity level
A one- or two-digit number that indicates the severity of the error
condition.
State
A one- to three-digit number with a maximum value of 127 that indicates
to Microsoft support engineers and developers the location in the SQL
Server code that generated the message:
Line number
A number within the batch or stored procedure that contains the
statement that generated the message. Line number can also be within
the text of the stored procedure that is being executed.
ma non del tutto
o quasi, mi son fatto questa idea: dato che dopo SELECT (Line 1) vado a
capo a ogni campo, potrebbe anche essere che Line 2 si riferisce a uno
qualsiasi dei 40 campi che preparo, che MSSMS considera come una sola
riga, e che la risposta la potrei trovare togliendo uno alla volta i
campi dalle query, partendo dall'ultimo finché non trolo il bandolo
della matassa
a meno che abbiate un metodo diverso e più spiccio
Come scritto all'inizio, le query 2 e 3 sono state modificate partendo
da una copia della query 1; la 2 è praticamente identica, cambia giusto
il nome della Ditta (vedi sopra) e la formula di calcolo dell'importo;
la 3 ha qualche ritocco in più, necessario in quanto alcune
informazioni sono memorizzati in tabelle con nome diverso
ho generato i dati per la 1 e la 3, li ho messi in excel uno sopra
l'altro: a prima vista NON ci sono evidenti anomalie, tipo che nella 1
c'è una ABC e nella 3 c'è un 678
tabella (Delivery) presente in tre database diversi (stesso gestionale
SBO), corrispondenti a tre filiali della stessa società di gruppo
i primi due db sono sullo stesso server, il terzo è su uno diverso
quando le eseguo singolarmente funzionano senza problemi
se unisco i db 1 e 2, quelli che stanno sullo stesso server funziona
quando accodo anche il terzo ho questo errore:
Msg 245, Level 16, State 1, Line 2
Conversion failed when converting the nvarchar value 'Nome della ditta
DUE' to data type int.
(nota il DUE)
Google dice che "the common reason is that you are trying to convert,
either implicitly or explicitly, a varchar value to an int data type
and the varchar value cannot be converted to an int data type"
la prima domanda è: cosa significa Line 2 nel messaggio di errore?
nella query la riga 2 è vuota, è parte dei commenti iniziali che
spiegano la rava e la fava
se prendo la riga 2 del codice SQL vero è una semplice assegnazione di
testo a una variabile: 'Ditta1' as dbSAP
SELECT
'Ditta1' as dbSAP
i corrispondenti delle altre due qery variano solo per il nome usato:
SELECT
'Ditta2' as dbSAP
e
SELECT
'Ditta2' as dbSAP
A cosa si riferisce quindi quel Line 2 nel messaggio di errore?
Google aiuta un po':
Error number
A one-to-five-digit number that identifies the message. Error numbers
for user-defined messages can contain more digits.
Description
A Unicode string that contains information about the condition that
generated the message.
Severity level
A one- or two-digit number that indicates the severity of the error
condition.
State
A one- to three-digit number with a maximum value of 127 that indicates
to Microsoft support engineers and developers the location in the SQL
Server code that generated the message:
Line number
A number within the batch or stored procedure that contains the
statement that generated the message. Line number can also be within
the text of the stored procedure that is being executed.
ma non del tutto
o quasi, mi son fatto questa idea: dato che dopo SELECT (Line 1) vado a
capo a ogni campo, potrebbe anche essere che Line 2 si riferisce a uno
qualsiasi dei 40 campi che preparo, che MSSMS considera come una sola
riga, e che la risposta la potrei trovare togliendo uno alla volta i
campi dalle query, partendo dall'ultimo finché non trolo il bandolo
della matassa
a meno che abbiate un metodo diverso e più spiccio
Come scritto all'inizio, le query 2 e 3 sono state modificate partendo
da una copia della query 1; la 2 è praticamente identica, cambia giusto
il nome della Ditta (vedi sopra) e la formula di calcolo dell'importo;
la 3 ha qualche ritocco in più, necessario in quanto alcune
informazioni sono memorizzati in tabelle con nome diverso
ho generato i dati per la 1 e la 3, li ho messi in excel uno sopra
l'altro: a prima vista NON ci sono evidenti anomalie, tipo che nella 1
c'è una ABC e nella 3 c'è un 678
--
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........