Je l'ai essayé à plusieurs reprises de passer le caractère de tabulation réelle pour SQLCMD, et je simplement Je n'arrive pas à le prendre. Mon travail préféré à ce jour est de passer SQLCMD le "Unit Separator" ASCII, qui est hexadécimal 0x1F, et peut être entré sur la ligne de commande en tapant Ctrl-_ (soulignement de contrôle, qui sur un clavier américain devient ctrl-shift -'- '(le' - 'à côté du' 0 'sur la rangée supérieure du clavier)
L'avantage d'utiliser le' Séparateur d'unité 'est qu'il est TRÈS improbable d'être présent dans le texte de tout description et a été spécialement conçu à cet effet (voir https://en.wikipedia.org/wiki/Delimiter)
Après avoir obtenu SQLCMD faire ça pour moi, je puis redirigez sa sortie si une commande traduit style Unix:
tr '\037' '\t'
Le \ 037 est octal pour 'Unit Separator', et \ t représente le caractère de tabulation, 'tr' traduira TOUS les deux pour nous, nous n'avons pas besoin de compter sur des astuces dans nos scripts ou shells. Pour obtenir 'tr' sur Windows, vous pouvez installer le paquet CoreUtils à partir de GnuWin32 (voir http://gnuwin32.sourceforge.net/packages/coreutils.htm) ou aller lourd et installer un environnement Unix complet tel que Cygwin (http://cygwin.com/).
Mettre les deux ensemble, nous obtenons:
sqlcmd ... -h-1 -W -k -r1 -s^_ ... | tr '\037' '\t'
et cela vous donnera votre sortie avec des onglets. Recherchez les autres options que j'ai utilisées ci-dessus, elles sont essentielles pour obtenir une sortie propre de SQLCMD (dans l'ordre: pas d'en-tête, espace blanc, CRLF dans les espaces, erreurs dans STDERR (pas dans votre sortie) fichier!) et le '^ _' est comment le séparateur d'unité apparaîtra sur la ligne de commande). Vous devrez également ajouter "SET NOCOUNT ON". à votre requête ou votre script SQL, sinon vous obtiendrez le nombre de lignes comme un message d'essai apparaissant dans votre sortie!
Grande répondre!!!! Pour ceux qui cherchent à le faire dans PowerShell - notez que l'espace après '-s' est important. :) –