2012-05-12 3 views
3

출력 파일 형식을 SQLCMD 모드에 지정할 수있는 방법이 있습니까? BULK INSERT을 사용하여 다시 읽을 수 있습니까?SQLCMD 모드에서 출력 형식을 지정 하시겠습니까?

:CONNECT SERVER1 
:OUT 'E:\test' 

SELECT TOP 100 ID, NAME 
FROM DB1.dbo.TABLE1 

GO 

:CONNECT SERVER2 
:OUT 'E:\test2' 

CREATE TABLE #TEMP(ID INT, NAME VARCHAR(100)) 

BULK 
INSERT #TEMP 
FROM 'E:\test' 
WITH 
(
    FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '\n' 
) 
GO 

SELECT * 
FROM DB2.dbo.TABLE2 
WHERE ID IN (SELECT ID FROM #TEMP) 

-- Other queries for #TEMP 

GO 

답변

1

다음은 CSV 파일을 생성 SQLCMD를 사용하는 좋은 예이다 : 나는 이런 식으로 뭔가하고 싶은

http://www.siusic.com/wphchen/sqlcmd-example-to-output-in-csv-format-350.html

sqlcmd 
    -S “ServerName” -U “UID” -P “PWD” -d “DBName” 
    -i “c:\input.txt” 
    -o “c:\output.txt” 
    -s “,” 
    -h -1 

당신은 SQLCMD를 사용할 수 /? 적용 가능한 모든 매개 변수를 표시합니다. ... 매개 변수 -h -1은 결과를 출력하지 않도록 유틸리티에 지시합니다. 헤더를 설정하십시오. 매개 변수 -s ","는 쉼표를 열 구분 기호로 사용하도록 유틸리티에 지시합니다.

+0

(원래의 시나리오를 사용)

감사합니다. 그러나 SQLCMD 모드와 sqlcmd 유틸리티를 의미했습니다. 나는 이것을 SSMS 인터페이스 내부에서하고있다. 다른 제안? – Legend

+0

은 열의 텍스트가 쉼표를 사용하는 경우 실제로 엉망이되지만 그렇지 않으면 필요한 답변입니다. – rob

0

다소 자동화 된 방식으로 데이터 대량을 삽입하는 한 가지 방법은 중간 테이블을 사용하는 것입니다.

:CONNECT SERVER1 
    :OUT 'E:\test' 

    SELECT TOP 100 '^'+cast(ID as varchar(16))+'^^'+NAME 
    FROM DB1.dbo.TABLE1 

    GO 

    :CONNECT SERVER2 
    :OUT 'E:\test2' 

    CREATE TABLE #TEMP1(BOTHCOLUMNS VARCHAR(116)) 

    BULK 
    INSERT #TEMP1 
    FROM 'E:\test' 
    GO 

    CREATE TABLE #TEMP2(ID INT, NAME VARCHAR(100)) 

    INSERT #TEMP2 
    SELECT 
     Substring(BOTHCOLUMNS, 2, Patindex('%^^%', BOTHCOLUMNS) - 2), 
     Substring(BOTHCOLUMNS, Patindex('%^^%', BOTHCOLUMNS) + 2, 
       Len(BOTHCOLUMNS) - Patindex('%^^%', BOTHCOLUMNS) - 1) 
    FROM #TEMP1 
    WHERE Patindex('%^^%', BOTHCOLUMNS) > 1 


    SELECT t2.* 
    FROM DB2.dbo.TABLE2 t2 
    JOIN #TEMP2 tmp2 on tmp2.ID=t2.ID 


-- Other queries for #TEMP 

GO