6

freeTSDとコマンドラインを使用してMintLinuxVMを介してMicrosoftSQLServer 2008インスタンスに接続し、SQLステートメントを実行することができます。今、私はこれをbashスクリプトで自動化したいです。bashスクリプトに正常にログインできます。

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

これが私のbashスクリプトのサンプルです:

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スクリプトの出力は次のとおりです。

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> 

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

誰かが私の問題に段階的に答えてくれますか?

4

3 に答える 3

5

サンプルがどのように機能するかはまったくわかりません。

これが私の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
于 2012-11-14T21:45:52.503 に答える
3

古いスレッドですが、これは機能しているようです。

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)
于 2015-12-14T21:22:07.813 に答える
0

試す

 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" 

この文字列の残りの部分はおそらく機能するものです

試してみてください

 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" 

試してみてください

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

odbcを使用している場合は、2回目の試行をお勧めします。SQL文の区切り文字として「go」という単語を使用してコマンドをSQLに送信する場合は、最初のコマンドの方が適している可能性があります。多分3番目のもの...知っている...試行錯誤だけが言うことができる...

于 2012-10-29T15:50:06.500 に答える