Avatar billede md_craig Nybegynder
26. september 2006 - 20:48 Der er 5 kommentarer og
1 løsning

Problemer med Tabelnavne under SqlBulkImport

Hej...

Jeg har lige lidt problemer med nogle tabelnavne under noget SqlBulkImport...

Problemet er at navnet indeholder et '.' som jeg lige umiddelbart kan se det, som fx:

TAG_XXX-Type.Interval

Punktummet er jo et alm. problem med Tabel navne da de jo adskiller Database.Role.Table normalt, men det plejer jo at virke fint hvis man bare inkapsulere det med []... altså...

dbo.[TAG_XXX-Type.Interval]...

Se dette virker også ganske fint under både Create Table og Insert Statements... men IKKE under SqlBulkImport...

Jeg sætter destination table som fx:

bulk.DestinationTableName = "dbo.["+this._target+"]";

Problemet er bare at den stadig mælder fejl...
Dog ikke den typiske fejl man får med syntax errors i SQL... men derimod følgende:

InvalidOperationException

Failed to obtain column collation information for the destination table. If the table is not in the current database the name must be qualified using the database name (e.g. [mydb]..[mytable](e.g. [mydb]..[mytable]); this also applies to temporary-tables (e.g. #mytable would be specified as tempdb..#mytable).

Erstatter man lige punktummet med - virker det fint... men da man jo godt kan lave tabeller hvor navnet kan indeholde et '.' må man også kunne bulk importe til dem...
Avatar billede a1a1 Novice
26. september 2006 - 21:26 #1
men man burde ikke lave tabeller med . og også æøå og andre mystiske tegn ;o)

hvis jeg forstår fejlmeddelelsen skal du i stedet bruge:
bulk.DestinationTableName = "dbo.["+this.._target+"]";
(ekstra punktum)
prøv?
;o)
Avatar billede md_craig Nybegynder
27. september 2006 - 00:56 #2
Nej...

Grunden til de to punktummer i fejlbeskeden er fordi man i SQL kan give hele stien med:

Database.Role.Table

Man kan så undlade Role, så bliver det Database..Table

Men jeg bruger Role.Table (som også bør virke)...

Det gør det desuden også i en således konfing:

INSERT INTO dbo.[TAG_XXX-Type.Interval] VALUES ('ts',2.332,0);

Alternativer til den er:

INSERT INTO KYV.dbo.[TAG_XXX-Type.Interval] VALUES ('ts',2.332,0);
INSERT INTO [TAG_XXX-Type.Interval] VALUES ('ts',2.332,0);
INSERT INTO KYV..[TAG_XXX-Type.Interval] VALUES ('ts',2.332,0);

(Skulle det være helt flot, så med en masse kantede klammer:

INSERT INTO [KYV].[dbo].[TAG_XXX-Type.Interval] VALUES ('ts',2.332,0);
INSERT INTO [TAG_XXX-Type.Interval] VALUES ('ts',2.332,0);
INSERT INTO [KYV]..[TAG_XXX-Type.Interval] VALUES ('ts',2.332,0);

Det sidste eksempel er så det Fejlbeskeden foreslår... og er afprøvet...

Desuden er det du har sat punktummet ind på et Field... det vil ganske enkelt ikke Compile, this._target indeholder fx strengen: "TAG_XXX-Type.Interval"
Avatar billede a1a1 Novice
27. september 2006 - 01:30 #3
sorry..;o) NEJ?
men man burde ikke lave tabeller med . og også æøå og andre mystiske tegn ;o)

men det jeg mener er prøv...:
(hvis din tabel hedder f.eks. TAG_XXX-Type.Interval)

INSERT INTO [KYV].[dbo].[TAG_XXX-Type..Interval] VALUES ('ts',2.332,0);

;o)
Avatar billede a1a1 Novice
27. september 2006 - 01:34 #4
og man bør også altid angive sine destinations felter (det kan jo være at der er en anden programmør der synes at der skal være et ekstra felt) ;o)

insert into table (field1, field2) values (1,3)

;o)
Avatar billede md_craig Nybegynder
27. september 2006 - 12:31 #5
Ok... nu er det ikke for at lyde negativt eller noget?... men hvor grundigt har du egentlig læst mine posts?... for du har misforstået en række ting...

- For det første så virker mine INSERT's fint som de er...
- For det andet så prøvede jeg i [27/09-2006 00:56:53] at forklare dig hvad det egentlig er fejlmeddelelsen siger, for det har du tilsyneladene også misforstået
- For det 3. så har mine INSERT's intet med problemet at gøre, ved Sql Bulk Import, angives ingen INSERT, men derimod et destinations table. så hvordan en INSERT bør skrives hvis det skal være helt folt, er irrellevant.
- For det sidste, så virker det egentlig ikke til at du ved ret meget om SqlBulkCopy (Bulk Import)... og hvad det går ud på?? (No offence)

Kan godt være det lyder lidt negativt, men man må vel også hellere være ærlig....
Avatar billede md_craig Nybegynder
03. oktober 2006 - 10:23 #6
Lukker her da der er fundet et "Work around"...

Som ganske enkelt går ud på at omdøbe tabelsne til sidst, efter bulkimport er kørt...
Bare lidt ærveligt at man skal lave workarounds på den slags...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester