2012-10-27 11 views
5

में एसक्यूएल प्रश्नों को निष्पादित करना मैं फ्रीटीटीएस और कमांड लाइन का उपयोग करके मिंट लिनक्स वीएम के माध्यम से एक माइक्रोसॉफ्ट एसक्यूएल सर्वर 2008 इंस्टेंस से कनेक्ट करने में सक्षम हूं, इस पर एसक्यूएल स्टेटमेंट निष्पादित करने के लिए। अब मैं इसे एक बैश स्क्रिप्ट में स्वचालित करना चाहता हूं। मैं सफलतापूर्वक मेरी 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 कमांड लाइन के माध्यम से मैन्युअल कर रही है, लेकिन नहीं है जब मैं बैश फ़ाइल में डाल । मैंने इस पोस्ट का पालन किया: freeTSD & 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 

बैश स्क्रिप्ट का आउटपुट है:

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> 

और फिर मेरी स्क्रिप्ट के बाकी निष्पादित किया जाता है

यहाँ मेरी 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? 

कोशिश का उपयोग कर एक ';' चार।

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 

आईएचटीएच।

वर्तमान कमांड लाइन इनपुट:

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

आपको लगता है कि "आउटपुट के रूप में उपयोग करें ..." मैंने संशोधित किया है जैसा आपने कहा था \ '\ r' n 'क्योंकि मैं साइगविन का उपयोग कर sshing हूँ। मुझे इसका परिणाम मिलता है: '>' जो किसी प्रकार के प्रॉम्प्ट की तरह दिखता है, यह फ्री टीडीएस नहीं है क्योंकि इसमें आमतौर पर '#' संलग्न होता है और एसक्यूएल कमांड स्वीकार करता है ... echo "तालिका से हटाएं जहां उपयोगकर्ता आईडी> 5 \ r \ n \ r \ n तालिका से हटाएं जहां उपयोगकर्ता आईडी> 5 \ r \ n \ r \ n तालिका से हटाएं जहां आईडी> 5 \ r \ n जाओ \ r \ n बाहर निकलें \ r \ n "

+0

संपादन देखें, क्षमा करें। लेकिन नहीं, उत्पादन नहीं, यह दस्तावेजों के खोल के माध्यम से tsql के लिए इनपुट है। क्षमा करें, लेकिन आपकी बाकी टिप्पणी को पढ़ने के लिए संभव है, क्या आप इसके बजाय अपना प्रश्न अपडेट कर सकते हैं? (दिन के लिए छोड़कर, घर से आपकी प्रतिक्रिया को देखने में सक्षम हो सकता है, लेकिन कल तक अधिक संभावना नहीं है।) भगवान भाग्य। – shellter

+0

मैंने संशोधित किया, कोई विचार? @ शेलटर –

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 उपयोग कर रहे हैं की कोशिश है, मैं दूसरी टीआर की सिफारिश करता हूं ial। यदि आप sql को "go" शब्द के साथ sql वाक्यों को विभाजक के रूप में भेज रहे हैं, तो शायद पहला बेहतर होगा। शायद तीसरा ... जो जानता है ... केवल परीक्षण और त्रुटि बता सकती है ...

+0

कोई भी काम तय लग रहा था, मुझे लगता है कि समस्या मुझे लगता है कि है मुफ्त टीडीएस में 'एंटर' कुंजी की नकल करने की आवश्यकता है ताकि कमांड को समाप्त कर दिया जा सके, या अगली पंक्ति में सही डेलीमीटर ... –

+0

@ एबेल: "नकल कुंजी कुंजी", आप कहते हैं कि आप बैश का उपयोग कर रहे हैं, किसी भी मौके पर आप विंडोज वातावरण में बाश का उपयोग कर रहे हैं (शायद सिगविन भी?)। "\ R" 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) 
संबंधित मुद्दे