2012-10-27 16 views
5

freeTSDとコマンドラインを使用してMint Linux VM経由でMicrosoft SQL Server 2008インスタンスに接続して、SQL文を実行できます。今私はbashスクリプトでこれを自動化します。私は正常に私のbashスクリプトにログインすることができています:freeTDS bash:Microsoft SQL ServerでSQLクエリを実行する

TDSVER=8.0 tsql -H servername -p 1433 -D dbadmin -U domain\\Administrator -P password 

私はその後、私のSQLクエリを持っている:

USE dbname GO delete from schema.tableA where ID > 5 GO delete from schema.tableB where ID > 5 GO delete from schema.tableC where ID > 5 GO exit 

freeTSDコマンドラインを介して手動で行う場合は、この作品ではなく、私はbashのファイルに入れたときに。私はこの投稿に続きました:freeTSD & bash

locale is "en_US.UTF-8" 
locale charset is "UTF-8" 
Default database being set to sbdb 
1> 2> 3> 4> 5> 6> 7> 8> 

、その後、私のスクリプトの残りの部分が実行されます。

echo "USE dbname GO delete from schema.tableA where userid > 5 go delete from schema.tableB where userid > 5 go delete from schema.tableC where ID > 5 GO exit" > tempfile | TDSVER=8.0 tsql -H servername -p 1433 -D dbname -U domain\\Administrator -P password < tempfile 

bashスクリプトの出力は次のとおりです。

は、ここに私のbashスクリプトのサンプルです。

誰かが私の問題にステップ・バイ・ステップで答えることができますか?

+0

が:)いくつかのハイパーリンクの問題を修正し、これらの –

答えて

3

サンプルがどのように動作するかはわかりません。ここで

は私のbashスクリプトのサンプルです:

echo "USE dbname .... exit" > tempfile | TDSVER=8.0 tsql -H servername -p 1433 -D dbname -U domain\\Administrator -P password < tempfile 
# ------------------------------------^^^^ ---- pipe char? 

てみ使用して ';' char。

echo "USE dbname .... exit" > tempfile ; TDSVER=8.0 tsql -H servername -p 1433 -D dbname -U domain\\Administrator -P password < tempfile 
# ------------------------------------^^^^ ---- semi-colon 

さらに、シェルの「ここのドキュメント」を使用してください。

TDSVER=8.0 tsql -H servername -p 1433 -D dbname -U domain\\Administrator -P password <<EOS 
    USE dbname 
    GO 
    delete from schema.tableA where userid > 5 
    go 
    delete from schema.tableB where userid > 5 
    go 
    delete from schema.tableC where ID > 5 
    GO 
    exit 
    EOS 

IHTH。

現在のコマンドライン入力:

echo "delete from table where userid > 5 
go 
delete from table where userid > 5 
go 
delete from table where ID > 5 
GO 
exit" < /tmp/tempfile; TDSDUMP=/tmp/freetds.log TDSVER=8.0 tsql -H servername -p 1433 -D dbname -U Administrator -P password <<EOS 
+0

「出力としてdbname ...を使用する」と表示されますか?私はcygwinを使ってsshingしているように '\ r \ n'を含めて言ったように修正しました。私は結果を得る: '>'プロンプトのいくつかのタイプのように見える、そのFreeTDSではなく、通常は '#'が追加され、sqlコマンドを受け入れるようになっている... echo "delete from table where userid> 5 \ r \ n ID \ 5 \ r \ n終了\ r \ n終了\ r \ n "

+0

編集を参照してください、申し訳ありません。しかし、いいえ、出力ではなく、ここでシェルのドキュメントを介してtsqlに入力します。申し訳ございませんが、あなたのコメントの残りの部分を読むことは不可能です。代わりに質問を更新できますか? (その日は出発して、家からのあなたの反応を見ることができるかもしれませんが、明日まではそうではありません。)GOod luck。 – shellter

+0

私は、任意のアイデアを変更? @Shellter –

0

は、この文字列の残りの部分は多分

を動作し、

echo "USE dbname;\n delete from schema.tableA where ID > 5;\n delete from schema.tableB userid > 5;\n delete from schema.tableC where ID > 5;\n exit\n" 

を試してみて、ODBCを使用している場合

echo "USE dbname; delete from schema.tableA where ID > 5; delete from schema.tableB userid > 5; delete from schema.tableC where ID > 5; exit" 

を試みるものである

echo "USE dbname\n GO\n delete from schema.tableA where ID > 5\n GO\n delete from schema.tableB userid > 5\n go\n delete from schema.tableC where ID > 5\n GO\n exit\n" 

を試してみてください私は2番目のtrをお勧めしますial。 "go"という単語をsql文の区切り記号としてsqlに送信する場合は、最初の方が良いかもしれません。 多分3番目のもの...誰でも知っているのは試行錯誤だけです。

+0

どれも働いていない、私は問題が私ということだと思いますコマンドが実行されるようにfreeTDSの 'enter'キーを模倣するか、次の行に移動するための正しい区切り文字を必要とします... –

+0

@ebel: "mimic enter key"とは、Windows環境(おそらくCygwinでも可能です)でbashを使用しているとします。上記の "\ n"を "\ r \ n"に変更してみてください。がんばろう。 – shellter

2

旧スレッドが、これは動作するように見えた...

printf "use mydbname\ngo\nselect * from mytable\ngo\nexit\n"|tsql -I freetds.conf -S profileName -U user -P 'password' 

1> 2> 1> 2> ID stringtest integertest 
1 test 50 
2 teststring2 60 
3 test3 70 
(3 rows affected) 
関連する問題