
SQL Server 2005에서 간단한 쿼리를 실행 중이며 sqlcmd를 통해 파일로 내보내고 싶습니다. 헤더와 쿼리 메타데이터(영향을 받는 행 수) 없이 csv 형식으로 결과를 얻기를 바랐습니다. 헤더의 경우 실제로 -h -1을 지정할 수 있지만 끝 텍스트를 어떻게 제거할 수 있습니까?
지금 당장 나는
sqlcmd -S klingon -d stardb -i C:\testscript.sql -o C:\testresults.csv -h -1 -s ","
대본은 조율에 맞게 간단합니다.
select x, y, z from agent
안타깝게도 결과는 다음과 같습니다.
24 aingles1 creablegs
25 tbails12 bull2dog12
26 jtaylor3 Leandon62606
27 forrestw1 nuke19211
(4 rows affected)
얼마나 많은 행이 영향을 받았는지 알려주는 마지막 부분을 제거하는 방법을 알려주는 도움말 파일에서 아무것도 찾을 수 없는 것 같습니다.
아이디어가 있으신가요?
답변1
"SET NOCOUNT ON" 옵션을 원하실 것 같습니다. SQL 스크립트는 다음과 같습니다.
set nocount on
select x, y, z from agent
set nocount off
결과 세트는 다음과 같습니다.
24 aingles1 creablegs
25 tbails12 bull2dog12
26 jtaylor3 Leandon62606
27 forrestw1 nuke19211
끝 부분의 행 수를 뺍니다.
답변2
sqlcmd.exe를 사용하여 결과를 CSV로 내보낼 때 모든 메시지를 제거하려면 쿼리 자체의 시작 부분에 다음 코드 블록을 추가합니다.
-- Suppress warnings and messages like (2 rows effected)
SET ANSI_WARNINGS OFF;
SET NOCOUNT ON;
-- SQLCMD.exe batch command
:setvar SQLCMDERRORLEVEL 1
-- To Reenable
--:setvar SQLCMDERRORLEVEL 0
/**********************************************************************************
** DISABLING WARNINGS AND MESSAGES
** Disable "Changed database context to 'DatabaseName'." message in the CSV file when using
** SQLCMD.exe. You'll get a syntax error when executing this query in Management
** Studio if SQLCMD Mode is not enabled [Query] --> [SQLCMD Mode].
** :setvar SQLCMDERRORLEVEL 1 is used to disable messages like (152 Rows affected).
**********************************************************************************/
답변3
sqlcmd -S svr -d db ... | findstr /v "rows affected"
findstr
OS에 내장되어 있으며 grep과 유사합니다. findstr /?를 참조하세요. 더 많은 옵션을 확인하세요.
열을 제거하려면 다음을 사용하십시오.cut.exe
도구. 따라서 다음을 실행할 수 있습니다.
sqlcmd -S svr -d db ... | cut -c10-
이렇게 하면 문자 10부터만 출력되므로 줄 번호가 제거됩니다. 이에 따라 숫자 10을 조정합니다. 다음 필드를 시도해 볼 수도 있습니다.
sqlcmd -S svr -d db ... | cut -f2-
그러면 필드 2 이상(오른쪽)만 출력됩니다.