Sto cercando di eseguire alcuni sqlcmd tramite T-SQL su SQL Server 2008. C'è una parte del mio codice in cui sto controllando le dimensioni di un file di dati e se la dimensione del file di dati non è uguale a 0, quindi inizia a eliminare la tabella specifica in modo che possa BCP nei nuovi dati.Combina riga di comando e T-SQL - SQL Server
Qui di seguito è il mio codice che non è in esecuzione:
SET @myVariable = '
SETLOCAL
FOR %%R IN (X:\Main Folder\Data\'[email protected]+'_'[email protected]+'.dat) DO SET size=%%~zR
IF %size% NEQ 0 (
SQLCMD -E -S my-server-name -Q "DELETE FROM '[email protected]+'.'[email protected]+'.'[email protected]+';" >> X:\Main Folder\Log\Log.txt
)'
EXEC master..xp_cmdshell @myVariable
Per qualche ragione quando eseguo il mio stored procedure, il codice di cui sopra sembra essere saltato perché non spara indietro eventuali messaggi di errore.
MODIFICA: Dopo aver riaggiustato la spaziatura e il mio codice, @myVariable, viene eseguito ora. Tuttavia, non funziona ancora per quanto riguarda il fatto che cancella ancora la tabella anche se la dimensione del file di dati è uguale a 0. Tuttavia, quando la codifico in un file batch, funziona perfettamente. Qualche idea?
Perché non si fa ad aggiungere una stored procedure per il database che fa il tuo controllo ed eliminare o troncare. Quindi eseguirlo dalla riga di comando? –
Citazione attorno al nome del file? Entrambi in 'for' e l'output reindirizzato. – shawnt00
A seconda della configurazione e della versione di OS a/i mancante dopo IF. Prova IF/i. – Christian4145