atr*_*lla 26 sql-server sqlcmd
如何从此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>
Run Code Online (Sandbox Code Playgroud)
Ste*_*ath 15
我唯一能想到的是使用-h -1开关删除标题并将列名添加为SQL查询的第一行:
SELECT 'FirstName' as FirstName, 'LastName' as LastName
UNION
SELECT top 5 FirstName, LastName FROM Person.Contact
Run Code Online (Sandbox Code Playgroud)
请注意,如果还有其他数据类型,则(var)char需要使用以下内容转换字段:CAST(MyColumnName AS varchar(32)) as MyColumnName
Jus*_*ley 12
我没有在一个地方看到所有这些信息,并认为寻找它的下一个人可能会欣赏它...
使用该-h -1选项从输出中删除破折号(--------)并SET NOCOUNT ON删除"受影响的行".如果您要为另一个要处理的系统创建报告或CSV文件,这非常有用.
例:
SQLCMD -S 127.0.0.1\SQL_SERVER_Instance -d db_name -U db_login -P password -i your_script.sql -o your_output.csv -h -1
Run Code Online (Sandbox Code Playgroud)
在您的SQL脚本中:
SET NOCOUNT ON -- removes (rows affected from the output)
select 'your_column_1, your_column_2'
select * from your_table
Run Code Online (Sandbox Code Playgroud)
您不需要在select语句之间使用联合.
小智 10
仅使用sqlcmd和Windows命令行,没有存储过程:
REM Get the column headers ("set nocount on" is necessary to suppress the rows affected message)
sqlcmd -S MyServer -Q "set nocount on;select top 0 * from MyDatabase.MySchema.MyTable" -o "MyTableColumns.csv" -s "," -W
REM Remove hyphen line
findstr /R /C:"^[^-]*$" MyTableColumns.csv > MyTableHeader.csv
REM Get data without headers
sqlcmd -S MyServer -Q "set nocount on;select * from MyDatabase.MySchema.MyTable" -o "MyTableData.csv" -h -1 -s "," -W
REM You can also use bcp for this step
REM bcp "select * from MyDatabase.MySchema.MyTable" queryout "MyTableData.csv" -c -t"," -r"\n" -S MyServer -T
REM Append header and data
type MyTableHeader.csv MyTableData.csv > MyTableDataWithHeader.csv
Run Code Online (Sandbox Code Playgroud)
要处理内部分隔符的数据(例如"Atlanta,GA"),您需要单独指定字段(而不是使用"select*")并在SQL Server中使用QUOTENAME函数.
或者可能通过 sed 对输出进行后处理:
sqlcmd ... | sed -e '2d'
Run Code Online (Sandbox Code Playgroud)
删除第二行?
您可以从http://gnuwin32.sourceforge.net/packages/sed.htm获得 Win32 sed
而已!
如何从此sqlcmd命令的结果集中禁止连字符(------------):
您可以在1个命令中以简单的方式完成所有操作,而无需任何脚本或文件操作!
sqlcmd -d AdventureWorks -s ";" -Q "SET NOCOUNT ON; SELECT top 5 FirstName, LastName FROM Person.Contact" |findstr /v /c:"---"
Run Code Online (Sandbox Code Playgroud)
添加set nocount on;以删除(X rows affected)行。添加|findstr /v /c:"---"以删除下划线。这样,您仅需:
FirstName ;LastName
Gustavo ;Achong
Catherine ;Abel
Kim ;Abercrombie
Humberto ;Acevedo
Pilar ;Ackerman
Run Code Online (Sandbox Code Playgroud)
mar*_*c_s -7
我认为没有任何选项可以实现这一目标 - 恐怕您将不得不忍受这些标头。