2016-07-18 46 views
0

Ich habe einige DDL-Abfragen geschrieben in mehrere SQL-Dateien mit dem Namen als 1.sql 2.sql etc 1000 f iles verwenden containg dort 2000+ Tabelle statmentsmehrere SQL-Abfragen einzelne Skript in isql

erstellen muss ich verwenden Sybase isql mit Unix b ox.

Ich möchte ein einzelnes Skript vorbereiten, das diese Skripte einzeln aufrufen kann.

Wie man das macht

Beispiel 1.sql haben Befehl create table endet gehen mit

Script Master. sh

Es isql enthält -S Server -D Datenbank Passwort etc -i 1.sql

gleiche Art und Weise bis zu 1000.sql

Bitte lassen Sie mich wissen, wie

Antwort

0

In Ihrem Master laufen .sh versuche etwas in den folgenden Zeilen. Der Code geht davon aus, dass alle Dateien vorhanden sind und die Dateien von 1 bis 1000 benannt sind. Alle Dateien befinden sich im selben Verzeichnis wie das Skript master.sh. Sie können/müssen zusätzliche Plausibilitätsprüfungen hinzufügen, um zu überprüfen, ob Ihre SQL-Dateien existieren oder nicht.

#!/bin/bash 

for i in `seq 1 1000` 
do 
    isql -S Server -D database password etc -i $i.sql 
done 
-1

Wenn Sie nicht sicher über die Anzahl der Dateien, beachten Sie bitte, sie alle zu einem einzigen Verzeichnis bewegen und stellen Sie sicher, dass sie die gleiche Ausdehnung haben (wie ‚* .sql‘). Dann können Sie ein Stück Code haben wie unten:

#!/bin/bash 

for fn in `ls -l *.sql | awk '{print $9}' ` 
do 
isql -S ServeName -D DatabaseName -U UserName -P PassWord -i $fn 
done 
+0

Parsen Sie nicht die Ausgabe von 'ls',' * .sql' wird gut funktionieren. – Kusalananda

+0

@Kusalananda Das Parsen wurde verwendet, um die Dateinamen aus der Ausgabe von 'ls -l' herauszufiltern, die normalerweise wie folgt aussieht:' -rw-r - r-- 1 user1 group1 8279 Apr 11 2014 test.log' – sumitkd

+0

Das ganze Backtick-Bit darf nur durch '* .sql' ersetzt werden. Das Aufrufen von "ls" und "awk" ist nicht notwendig. – Kusalananda

0
for ((i = 1; i <= 1000; ++i)); do 
    isql -S Server -D database password etc -i $i.sql 
done 

Um zu vermeiden, tausend Anrufungen von isql, von denen jeder eine Netzwerkverbindung einrichten, Authentifizierung usw. (die Zeit in Anspruch nehmen):

for ((i = 1; i <= 1000; ++i)); do 
     cat $i.sql 
done | isql -S Server -D database password etc 

Wenn die SQL in den verschiedenen Dateien ist unabhängig von einander (dh Datei 534.sql vor 55.sql laufen kann), könnte man sogar versuchen

cat *.sql | isql -S Server -D database password etc