Avatar billede iakob Nybegynder
01. oktober 2003 - 12:42 Der er 5 kommentarer og
1 løsning

Output med danske specialtegn (xp_cmdshell)

Følgende kommando:
exec master..xp_cmdshell "echo æøåÆØÅ >> c:\test.txt"

giver problemer med de danske specialtegn. Hvordan angiver man dansk sprog i den forbindelse.

Er der evt andre, mere smarte måder at skrive til en fil inde fra MS Transact SQL på SQL Server 2000?
Avatar billede venne Nybegynder
01. oktober 2003 - 13:06 #1
Du kan evt. bruge OLE Automation sammen med FileSystemObject:


DECLARE @fso int
DECLARE @ts int

-- Skaf FSO-objekt
EXEC sp_OACreate 'Scripting.FileSystemObject', @fso OUTPUT

-- Opret fil
EXEC sp_OAMethod @fso, 'CreateTextFile', @ts OUTPUT, 'c:\test.txt'

--Skriv noget i filen
EXEC sp_OAMethod @ts, 'WriteLine', NULL, 'æøåÆØÅ'

-- Luk filen
EXEC sp_OAMethod @ts, 'Close'

-- Destruer objekter
EXEC sp_OADestroy @ts
EXEC sp_OADestroy @fso
Avatar billede iakob Nybegynder
02. oktober 2003 - 13:52 #2
Hvordan forhindrer man disse kommandoer i at overskrive filen hver gang man kører batchen?
Avatar billede venne Nybegynder
02. oktober 2003 - 14:57 #3
Åbn filen 'for appending' i stedet for at oprette den:

EXEC sp_OAMethod @fso, 'OpenTextFile', @ts OUTPUT, 'c:\test.txt', 8, 1

Der står en masse om FileSystemObject her:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/FSOoriFileSystemObject.asp
Avatar billede iakob Nybegynder
06. oktober 2003 - 10:03 #4
Hm...
Det giver mig det problem at jeg skal hælde al teksten ind i filen på een gang (fordi OLE Automation id'erne ikke kan sendes med som parameter til en fil) eller åbne og lukke objekterne mange gange.

Min algoritme ser således ud:
blabla
skiv til fil
while (){
  blabla
  skriv til fil
  blabla
  skriv til fil
}
blabla
skiv til fil


Jeg vil gerne have min algoritme (blabla) og min udprintning adskildt i to procedurer, så jeg kun behøver at kalde en udprintningsprocedure midt i min egentlige algoritme.
Avatar billede venne Nybegynder
09. oktober 2003 - 23:32 #5
Hm...
Jeg er ikke helt med på hvad det er du ikke kan. Er din algoritme kodet i TSQL (stored procedure) eller er det et program?
Avatar billede iakob Nybegynder
10. oktober 2003 - 19:14 #6
Det er en stored procedure (TSQL), som skal skrive noget ud i en fil ind imellem sin øvrigt algoritme. Jeg har en anden stored procedure der skal gøre det samme og der kan i øvrigt komme flere andre procedurer.

Derfor vil jeg gerne nøjes med at kalde en udskrivningsprocedure, som i øvrigt tager sig af fejlhåndtering for selve skrivningen til fil.

Endvidere er hastighed også en faktor her. Det må helst ikke blive for langsomt.

Lidt test har dog vist at det ikke  bliver for langsomt selvom jeg åbner og lukker objekter og filer mange gange. Så derfor siger jeg tak for tippet!
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
Computerworld tilbyder specialiserede kurser i database-management

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