Sql-Server

使用 SQLCMD 導出/提取不帶尾隨空格的數據

  • February 4, 2021

我正在嘗試使用 sqlcmd 實用程序從我的一些表中提取數據,因為 SSMS 不會為我生成適當的 csv-s。

我的問題:所有 csv 提取都包括根據表定義的尾隨空格(我的意思是欄位長度),無論使用 char、varchar、nvarchar 等…

當使用 sqlcmd 實用程序時,例如具有以下選項:

sqlcmd -S . -d /*databasename*/ -E -s, -W -Q "SELECT * FROM /*tablename*/" > C:\Test.csv

它仍然包含尾隨空格,例如:

,"273                 ",

在 SSMS 中執行此操作和/或更正我的 SQLCMD 參數的任何提示或技巧?

儘管 SQLCMD 使用螢幕 ( SQLCMD -?) 如何描述-W參數:

$$ -W remove trailing spaces $$

此參數的實際目的不是刪除現有的尾隨空格,而是跳過用空格填充值。-W如果一個字元串值已經有它自己的尾隨空格,那麼如果你簡單地指定參數,它們就不能被刪除。

據我所知,沒有辦法用參數解決這個問題。您將不得不使用文本處理實用程序來操作輸出,或者首先生成沒有尾隨空格的值。對於後者,您可以使用該RTRIM()函式,但這當然意味著您必須將 替換為SELECT *實際的列列表,其中一些列將是計算列:

SELECT
 ...
 RTRIM(SomeStringColumn) AS SomeStringColumn,
 ...
FROM
 ...

你試過這些sqlcmd參數嗎?

sqlcmd
  -o output_file  
  -W (remove trailing spaces)

引用自:https://dba.stackexchange.com/questions/271930