2009-04-16 6 views
0

Ich muss Daten aus Excel in eine SQL 2000-Datenbank importieren.Wie kann ich Daten aus CSV oder XLS in SQL importieren, indem ich ein String-Feld basierend auf aktuellen Datensätzen in der DB automatisch inkrementiere?

Ich muss 6 Felder aus dem Arbeitsblatt importieren und ein Zeichenfolgenfeld mit einer Ganzzahl um 5 Zeichen mit führenden Nullen inkrementieren. Dieses Feld ist nicht der Primärschlüssel, und die Datenbank füllt dies nicht automatisch. Auch die DB wird erlauben dieses Feld als NULL eingegeben werden, wenn dies hilft und dann ändern, wenn dies hilft.

Ich kann die Daten in die Tabelle, die ich brauche mit einer Kombination von Rookie DTS und Einfügen von Statements und manuell aktualisieren das String-Feld für die 20 Datensätze, die ich heute tun muss, aber nächste Woche muss ich rund 1000 Datensätze importieren.

Soll ich dafür eine C#/ADO.net App schreiben, [bedenkt, dass ich ein Neuling bin, also werde ich ein paar Tage brauchen :-)] oder gibt es eine Möglichkeit, eine zu erhöhen String-Feld mit DTS direkt oder eine Art von Schleife in einer Insert-Anweisung?

Vielen Dank im Voraus G

EDIT: Die Tabelle ist in Ich bin Einfügen ist so aufgebaut, wie unten und ich brauche "cedeviceid" zu aktualisieren "vanwarehouse", "username", "devicesimnumber", " UserGroup "und" ServiceMgr ". aus der Excel-Tabelle. "sendercode" ist die Zeichenfolge, die ich inkrementieren muss.

CREATE TABLE [dbo].[Mw_gsmprofile] (
[cedeviceid] varchar NOT NULL,
[mainwarehouse] varchar NULL,
[vanwarehouse] varchar NULL,
[Benutzername] varchar NULL,
[sendercode] varchar NULL,
[devicesimnumber] VARCHAR NULL,
[usersupportgsm] [int] NULL,
[userisonline] [int] NULL,
[Onlinedatum] VARCHAR NULL,
[lastsentsequenceno] [int] NULL,
[lastsentda te] VARCHAR NULL,
[lastreceivedsequenceno] [int] NULL,
[lastreceiveddate] VARCHAR NULL,
[EnableAutoDownloading] [int] NULL,
[EnableCompressFile] [int] NULL,
[Logonusername] VARCHAR NULL ,
[LogonPassword] VARCHAR NULL,
[Logondomain] VARCHAR NULL,
[Usergroup] VARCHAR NULL,
[UseStorageCard] [int] NULL,
[SMSMapProfile] VARCHAR NULL,
[SMPPClientFlag] [int] NULL,
[LASTUPDATE] VARCHAR NULL,
[ServiceMgr] VARCHAR NULL,
[VanLocation] VARCHAR NULL,
[OnHireWarehouse] VARCHAR NULL,
[OnHireWhsRepType] [int] NULL ,
[HireDepotWarehouse] VARCHAR NULL,
[HireDepotWhsRepType] [int] NULL,
CONSTRAINT [PK_mw_gsmprofile] PRIMARY KEY CLUSTERED
(
[cedeviceid] ASC
) mit (PAD_INDEX = AUS, STATISTICS_NORECOMPUTE = AUS, IGNORE_DUP_KEY = AUS, ALLOW_ROW_LOCKS = EIN, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

SAMPLE DATA

cedeviceid, vanwarehouse , Benutzername, devicesimnumber, Usergroup, ServiceMgr
3431, 999, INSTALL TEAM 1, INSTAL, AHOA
3441, 999, INSTALL TEAM 2, INSTAL, AHOA
3451, 999, INSTALL TEAM 3, INSTAL, AHOA
3461, 999, INSTALL TEAM 4,, INST AL, AHOA
3471, 999, INSTALL TEAM 5, INSTAL, AHOA
3472, 999, INSTALL TEAM 6, INSTAL, AHOA

Antwort

1

ich tun würde, dies mit einer kleinen App. Sie müssen das erste Element der Tabelle abrufen, in umgekehrter Reihenfolge sortiert (dadurch erhalten Sie den maximalen Wert der ID). Nachdem Sie den Maximalwert kennen, können Sie ihn sehr einfach mit der Ausdruckskraft einer Programmiersprache inkrementieren.

0
  1. den Ausgangswert aus dem
  2. Iterate über die importierten Datensätze Datenbank holen, sie einer nach dem anderen in die DB einfügen.Verwenden Sie eine Zählervariable, um das Feld zu erhöhen. Verwenden Sie die Überstreichung ("00000"), um die Nummer aufzufüllen.
2

Einige slifght eigene Trompete hier weht, aber mein eigenes FOSS-Tool CSVfix können dies tun, ohne Code zu schreiben, mit der (aus unerklärlichen Gründen) uundocmented Sequenz commanbd. Zum Beispiel kann eine CSV-Datei angegeben:

foo,bar 
one,two 
three,four 

dann:

csvfix sequence -n 42 -p 5 afile.csv 

würde die Ausgabe erzeugen:

00042, foo, bar 
00043, one, two 
00044, three,four 

die -p-Option spezifiziert die Polsterung und die -n Option der Ausgangs Nummer.

Jetzt finden Sie heraus, wie es aus der Hilfedatei ....

+0

Nice app! Vielen Dank. Der SQL_INSERT-Befehl sieht besonders interessant aus. G –