33

sqlcmdこのコマンドの結果セットからハイフン (------------) を抑制するにはどうすればよいですか?

C:\temp>sqlcmd -d AdventureWorks -s ";" 
 -Q "SET NOCOUNT ON SELECT top 5 FirstName, LastName FROM Person.Contact;"
FirstName                                         ;LastName
--------------------------------------------------;----------------------------
Gustavo                                           ;Achong
Catherine                                         ;Abel
Kim                                               ;Abercrombie
Humberto                                          ;Acevedo
Pilar                                             ;Ackerman

C:\temp>
4

19 に答える 19

16

私が考えることができる唯一のことは、-h -1スイッチを使用してヘッダーを削除し、列名を最初の行として SQL クエリに追加することです。

SELECT 'FirstName' as FirstName, 'LastName' as LastName
UNION
SELECT top 5 FirstName, LastName FROM Person.Contact

他のデータ型がある場合は(var)char、次を使用してフィールドを変換する必要があることに注意してください。CAST(MyColumnName AS varchar(32)) as MyColumnName

于 2011-06-15T07:17:01.020 に答える
10

それでおしまい!

この sqlcmd コマンドの結果セットからハイフン (------------) を抑制するにはどうすればよいですか。

スクリプトやファイルの操作なしで、 1 つのコマンドですべてを簡単に行うことができます!!

sqlcmd -d AdventureWorks -s ";" -Q "SET NOCOUNT ON; SELECT top 5 FirstName, LastName FROM Person.Contact" |findstr /v /c:"---"

set nocount on;行を削除するには追加し(X rows affected)ます。を追加|findstr /v /c:"---"して下線を削除します。このようにして、次のものだけで明確な答えが得られます。

FirstName                                         ;LastName
Gustavo                                           ;Achong
Catherine                                         ;Abel
Kim                                               ;Abercrombie
Humberto                                          ;Acevedo
Pilar                                             ;Ackerman
于 2016-06-20T14:43:47.617 に答える
5

または、次のように sed を介して出力を後処理することもできます。

sqlcmd ... | sed -e '2d'

2行目を削除するには?

http://gnuwin32.sourceforge.net/packages/sed.htmから Win32 sed を取得できます。

于 2012-06-12T05:42:50.803 に答える
2

ハイフンを取り除くために、列ヘッダーのみを出力するコードをストアド プロシージャに追加します。を使用したデータの抽出SQLCMDは、2 つの部分で行われます。

最初に、特別なパラメーター セットを使用してストアド プロシージャを呼び出します。私の場合、すべて NULL で SP を呼び出すと、列ヘッダーが必要になります。

次に、もう一度呼び出しSQLCMDて、先ほど作成したファイルに出力を追加すると、出来上がりです!

列ヘッダーを保持する空白の CSV ファイルを作成する

sqlcmd -S server -d database -U username -P password -o "somefile.csv" -h-1 
  -Q "exec myStoredProcedure NULL, NULL" -W -w 2000 -s"," > sometextfile.csv

ストアド プロシージャからの出力結果を追加します。

sqlcmd -S server -d database -U username -P password -o "somefile.csv" -h-1 
  -Q "exec myStoredProcedure 2011, 10" -W -w 2000 -s"," >> sometextfile.csv

最初のコマンドは>を使用し、2 番目のコマンドは>>を使用していることに注意してください。1つを使用する場合->「作成または上書き」および2つ->「追加または作成」。

  • -h-1 は、SQLCMD によって生成されたヘッダーを削除します
  • -W は末尾のスペースを削除します
  • -w 行の最大幅を設定します
  • -s は列区切りを定義します
于 2012-01-30T14:52:16.320 に答える
0

最初に(-oオプションを使用して)ファイルに出力できる場合、 を使用した別の後処理オプションは、ファイルの内容を読み取り (2 行目をスキップしながら)、それ自体に書き戻すことで機能します。

(Get-Content "file.txt" | Where {$_.ReadCount -ne 2}) | Set-Content "file.txt"
于 2013-05-26T07:13:45.310 に答える
0
Public Sub HyphenDelete(strFilename1 As String, Hyphens As Integer)


Const FOR_READING = 1
Const FOR_WRITING = 2

strFileName = strFilename1

strCheckForString = Left("-------", Hyphens)
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objTS = objFS.OpenTextFile(strFileName, FOR_READING)
strContents = objTS.ReadAll
objTS.Close

arrLines = Split(strContents, vbNewLine)
Set objTS = objFS.OpenTextFile(strFileName, FOR_WRITING)

For Each strLine In arrLines
   If Not (Left(UCase(LTrim(strLine)), Len(strCheckForString)) = strCheckForString) Then
      objTS.WriteLine strLine
   End If
Next

End Sub
于 2015-01-30T15:49:01.710 に答える
-1

データをスプールアウトする場合は、次のスイッチを設定できます。

下線をオフに設定;

于 2016-10-14T14:27:04.333 に答える
-6

これを達成するために利用できるオプションはないと思います - 残念ながら、それらのヘッダーと一緒に暮らす必要があります。

于 2010-03-02T10:07:09.950 に答える