2012-05-12 6 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

幾分自動的にデータを一括して挿入する1つの方法は、中間テーブルを使用することです。 (元のシナリオを使用して)

: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 
関連する問題