26. september 2006 - 20:48Der 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...
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...
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
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"
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....
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...
Synes godt om
Ny brugerNybegynder
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.