Con più domande
EXEC master..xp_cmdshell ... Formato data

Domanda
-
Salve,
sto modificando su una store procedura create da un precedente utente. La store procedure utilizza il codice
set
@cmd='dir "'+@folder+'"'
EXEC
master..xp_cmdshell@cmd
dove @folder è definito come un percorso locale. Il risultato viene salvato su una temporary table che viene utilizzata per importare tutti I file presenti nel folder indicato. Il server su cui viene eseguito la store procedureed I file che riceve sono con I settaggi USA. Ho modificato il mio PC (Lock, Language and region) da Italian a English (United States). Purtroppo però il riusltato salvato nella tabella temporanea ha le date non in format mm/dd/yyyy (come dovrei avere) ma dd/mm/yyyy (ossia Italiano). Come posso estrarre le informazioni della directory con gli standard USA?
Sto lavorando con Microsoft SQL Server 2012. Grazie
Tutte le risposte
-
Ciao!
Hai installato una versione localizzata di SQL Server? L'output di xp_cmdshell è in formato americano?
Puoi provare a trasformare la data con un convert?
select CONVERT(tipo di dato colonna data, valore, 101) i.e. select CONVERT(nvarchar(30), GETDATE(), 101)
-
Ciao,
si ho una versione localizzata di sql server, il set del PC è in lingua United States, ma purtroppo l'output di xp_cmdshell è in format italiano, mentre il format data delle tabelle che gestiscono I campi data sono in formato mm/dd/yyyy (perchèm utilizzano in formato di settaggio del PC.
Ho provato a convertire il valore stringa della data importata da xp_cmdshell utilizzando il convert ma mi da errore in conversione data.
Come mai il commando xp_xmdshell non utilizza come fomato data quella definite dal pc? Se io eseguo il commando dir da cmd vedo invece correttamente le date.
Grazie
-
Ciao,
ho fatto un po' di esperimenti (non ero mai arrivato a questo livello di xp_cmdshell, lo ammetto) e ho scoperto che il dateformat viene ereditato dalle impostazioni regionali dell'account che esegue il servizio di SQL Server.
Ho provato infatti su un server di test a cambiare il formato data, e nonostante abbia modificato configurazione da mdy a dmy non ottengo i risultati sperati, il layout rimane sempre mdy.
1)ho recuperato l'account configurato come service account in SQL Configuration Manager
2)ho ottenuto il SID dell'account con questa semplice chiamata, da prompt dei comandi.
3)sono andato ad esplorare il Registro di configurazione, sezione HKEY_USERS, alla ricerca del SID corretto (quello del mio service account)
4)Sezione Control Panel\International, ho provato a cambiare il valore di sShortDate da M/d/yyyy...
5)...a dd-MMM-yy.
6)Se rieseguo il medesimo comando, stavolta ottengo il dateformat che mi interessa.
Ti prego di voler esplorare questa possibilità a tua volta, e farmi sapere...
My 2 cents: come soluzione mi fa un po' paura, mi sembra poco "solida", e poco facile da gestire...hai possibilità di rinforzare questo processo? Se la volontà è quella di utilizzare xp_cmdshell, potresti costruire una piccola command line application in c#, o uno script vbs che possa interpretare e trasformare i dati che ottieni da filesystem...il top sarebbe imho un bel package di Integration Services...e disabilitare completamente xp_cmdshell :D