Conversione da nvarchar a smalldatetime

mercoledì 12 maggio 2010 - 17.13

anj Profilo | Newbie

Salve a tutti
Ho un problema:
ho un programma che legge dei valori e gli stampa su un MSSQLserver il problema nasce dal fatto che una data che mi viene stampata è di origine NVARCHAR, ma nella tabella dove deve scrivere è un capo di tipo SMALLDATETIME.

Premetto che il programma legge il comando SQL direttamente da una tabella contenuta anch'essa su MSSQL (
ES.
INSERT INTO TAB(giorno,numero,altro_num)VALUES(?,?,?);
)

con GIORNO (nvarchar(max),null)



Qualcuno ha qualche consiglio?
Grazie in anticipo

Anj

lbenaglia Profilo | Guru

>ho un programma che legge dei valori e gli stampa su un MSSQLserver
Gulp?
Che significa "gli stampa su un MSSQLserver"?

>il problema nasce dal fatto che una data che mi viene stampata
>è di origine NVARCHAR, ma nella tabella dove deve scrivere è
>un capo di tipo SMALLDATETIME.
>
>Premetto che il programma legge il comando SQL direttamente da
>una tabella contenuta anch'essa su MSSQL (
>ES.
>INSERT INTO TAB(giorno,numero,altro_num)VALUES(?,?,?);
> )
>
>con GIORNO (nvarchar(max),null)
Rigulp!! Una colonna Blob per memorizzare una data?!?!

>Qualcuno ha qualche consiglio?
Ne avrei parecchi, ma meglio concentrarsi sul problema
Formatta la stringa data nel formato YYYYMMDD senza alcun separatore.

>Grazie in anticipo
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

anj Profilo | Newbie

>>ho un programma che legge dei valori e gli stampa su un MSSQLserver
>Gulp?
>Che significa "gli stampa su un MSSQLserver"?
>

Nel senso che oltre a tenerli nel suo Db privato, tramite alcune procedure del programma stesso, posso richiedere di riportare i valori richiesti nel DB in oggetto (tramite ODBC)

>>il problema nasce dal fatto che una data che mi viene stampata
>>è di origine NVARCHAR, ma nella tabella dove deve scrivere è
>>un capo di tipo SMALLDATETIME.
>>
>>Premetto che il programma legge il comando SQL direttamente da
>>una tabella contenuta anch'essa su MSSQL (
>>ES.
>>INSERT INTO TAB(giorno,numero,altro_num)VALUES(?,?,?);
>> )
>>
>>con GIORNO (nvarchar(max),null)
>Rigulp!! Una colonna Blob per memorizzare una data?!?!
>

Già ma qui non ci possiamo fare niente! è lo stesso programma che necessita questo (se ti spiego tutto non mi basterebbe la giornata)

>>Qualcuno ha qualche consiglio?
>Ne avrei parecchi, ma meglio concentrarsi sul problema
mmmm
>Formatta la stringa data nel formato YYYYMMDD senza alcun separatore.
>

Spiegati meglio, ripeto, non posso toccare la data sono valori presi da remoto attraverso PLC
posso solamente scaricarli in tabella attraverso quel comando che ho scritto sopra,
unica soluzione che ho provato è una funzione tsql che comunque non funziona (per questa procedura, funziona se gli passo una normale stringa nella query)

>>Grazie in anticipo
>Prego.
>
>Ciao!
>--
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>http://blogs.dotnethell.it/lorenzo/
>http://italy.mvps.org

lbenaglia Profilo | Guru

>Spiegati meglio, ripeto, non posso toccare la data sono valori
>presi da remoto attraverso PLC
>posso solamente scaricarli in tabella attraverso quel comando
>che ho scritto sopra,
Eh, ma chi esegue l'INSERT?
Una applicazione?
Se si, questa applicazione per quale motivo non può formattare una stringa?

>unica soluzione che ho provato è una funzione tsql che comunque
>non funziona (per questa procedura, funziona se gli passo una
>normale stringa nella query)
Se non ti spieghi meglio, la vedo dura aiutarti...

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

anj Profilo | Newbie

>>Spiegati meglio, ripeto, non posso toccare la data sono valori
>>presi da remoto attraverso PLC
>>posso solamente scaricarli in tabella attraverso quel comando
>>che ho scritto sopra,
>Eh, ma chi esegue l'INSERT?
>Una applicazione?
>Se si, questa applicazione per quale motivo non può formattare
>una stringa?

come ho scritto prima, il comando, nella fattispecie INSERT INTO.. deve essere inserita in una tabella creata nel DB, sarà poi il programma attraverso sue procedure che va a prendere il comando..

es.
tabella comandi (.. inserto into tab1.. insert into tab2..)
tabella datiRicevuti(giorno,valore1,valore2)
tabella altriDatiRicevuti ...



>
>>unica soluzione che ho provato è una funzione tsql che comunque
>>non funziona (per questa procedura, funziona se gli passo una
>>normale stringa nella query)
>Se non ti spieghi meglio, la vedo dura aiutarti...

scusa ma è complicato spiegare il progetto, mi ci vorrebbe molto tempo

>
>Ciao!
>--
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>http://blogs.dotnethell.it/lorenzo/
>http://italy.mvps.org

lbenaglia Profilo | Guru

>come ho scritto prima, il comando, nella fattispecie INSERT INTO..
>deve essere inserita in una tabella creata nel DB, sarà poi il
>programma attraverso sue procedure che va a prendere il comando..
>
Quindi l'applicazione può formattare correttamente la data nel richiamare il comando di INSERT.

>scusa ma è complicato spiegare il progetto, mi ci vorrebbe molto
>tempo
Mettiti nei nostri panni, come credi che possiamo aiutarti se non abbiamo idea di cosa stai facendo?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ma_di Profilo | Junior Member

Se ho ben capito l'applicazione riceve dei dati, e poi sulla base di "non so cosa" in "non so dove" va a prendere un comando da una tabella SQL ( se ho ben capito l'INSERT) e "non so come" va a mettere questa data in formato NVARCHAR in un campo SMALLDATETIME, generando l'errore.
Se le cose stanno così:
1) Se è possibile mettere le mani nell'applicativo, basterebbe modificare la formattazione del campo ( come diceva Lorenzo)
2) Se non è possibile, bisognerebbe modificare la tabella comandi ( non ho idea come, bisognerebbe sapere con che logica l'applicativo la gestisce, magari riscrivendo il comando da eseguire, oppure la scrittura del dato così come arriva in un'altra tabella e poi con una stored triggerata che modifica il dato il smalldatetime....)
3) Se non è possibile neppure questo...sul momento non saprei che altro pensare ( sempre ammesso di averci capito qualcosa)

Ciao.

anj Profilo | Newbie

penso che la strada del trigger sia quella migliore..
ora devo capire come fare..

ma_di Profilo | Junior Member


>Premetto che il programma legge il comando SQL direttamente da
>una tabella contenuta anch'essa su MSSQL (
>ES.
>INSERT INTO TAB(giorno,numero,altro_num)VALUES(?,?,?);
> )
>
>con GIORNO (nvarchar(max),null)

Dentro la tabella che contiene la insert devi cambiare TAB con il nome di un'altra tabella da te creata; in questa nuova tabella il campo giorno dovrà essere ovviamente nvarchar; il software quindi non andrà più ad inserire dentro TAB ma dentro NUOVA_TABELLA.
Su questa tabella crei un trigger on insert che fa partire una stored procedure, all'interno della quale devi:
1) Prendere tutta la riga inserita
2) Convertire la data da nvarchar in smalldata
3) Eseguire la insert dentro la TAB
4) Cancellare la riga inserita dentro NUOVA_TABELLA

Ciao.


anj Profilo | Newbie

>
>>Premetto che il programma legge il comando SQL direttamente da
>>una tabella contenuta anch'essa su MSSQL (
>>ES.
>>INSERT INTO TAB(giorno,numero,altro_num)VALUES(?,?,?);
>> )
>>
>>con GIORNO (nvarchar(max),null)
>
>Dentro la tabella che contiene la insert devi cambiare TAB con
>il nome di un'altra tabella da te creata; in questa nuova tabella
>il campo giorno dovrà essere ovviamente nvarchar; il software
>quindi non andrà più ad inserire dentro TAB ma dentro NUOVA_TABELLA.
>Su questa tabella crei un trigger on insert che fa partire una
>stored procedure, all'interno della quale devi:
>1) Prendere tutta la riga inserita
>2) Convertire la data da nvarchar in smalldata
>3) Eseguire la insert dentro la TAB
>4) Cancellare la riga inserita dentro NUOVA_TABELLA
>
>Ciao.

Ottimo è esattamente quello che ho pensato...
Sto guardando come si fanno ora i TRIGGER
ho già provato 2 righe semplici ma ... non sono riuscito a farlo funzionare

Grazie


>
>
>
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5