Avatar billede tommy Nybegynder
20. november 2002 - 09:24 Der er 23 kommentarer og
1 løsning

Kunne godt bruge noget hjælp her.. :o)

Hejsa

Jeg sidder lidt fast i et eksperiment jeg sidder og leget lidt med på en MS SQL server.
Mit problem er at jeg har et view som returnere X antal kolonner og dem vil jeg egentligt
gerne have smidt ind i en temp tabel.

F.eks her er hvad viewet returnere:

email              username    password
tommy@hotmail.com  tommy        12345

og her er hvordan jeg gerne vil have dataen i min temp tabel:

columnName      columnValue
email          tommy@hotmail.com
username        tommy
password        12345


Jeg ved at dette ville normalt være noget ville klare med noget serverside
scripting, men jeg ville meget gerne have det klare på SQL serveren..

På forhånd tak..
Avatar billede terry Ekspert
20. november 2002 - 09:27 #1
You can use DTS to do this for you
Avatar billede terry Ekspert
20. november 2002 - 09:29 #2
There is LOADS of help on DTS in Books Online
Avatar billede terry Ekspert
20. november 2002 - 09:29 #3
am I right in saying that the same data is going into the temp table?
Avatar billede ocp Nybegynder
20. november 2002 - 09:34 #4
select email, username, password
into #tmp
from view

--Og en lille demo
select * from #tmp
Avatar billede ocp Nybegynder
20. november 2002 - 09:35 #5
Hvis det skal være en "permanent" tabel skal du fjerne #tmp.
Avatar billede ocp Nybegynder
20. november 2002 - 09:35 #6
Du skal fjerne # fra #tmp, mener jeg :)
Avatar billede tommy Nybegynder
20. november 2002 - 09:39 #7
Yes, but the trick is that I have to have the column names into the temp table to. I've been playing with a stored procedure called "sp_columns" that returns then names of the columns, but I still need to make the connection between the data and the column names.. ?

Do you have any examples if I want to use DTS for this ?
Avatar billede terry Ekspert
20. november 2002 - 09:41 #8
OK, now I understand what itis you wnat to do. I will just have a think and get back if I come up with anything
Avatar billede ocp Nybegynder
20. november 2002 - 09:41 #9
select Email = email,
      UserName = username,
      Password = password
into #tmp
from views:8051
Avatar billede ocp Nybegynder
20. november 2002 - 09:42 #10
Oops, get rid of ":8051"
Avatar billede tommy Nybegynder
20. november 2002 - 09:45 #11
Hej Ocp...

Så let er den desværre ikke, problemet er at det veiw jeg kalder er på baggrund af en dynamisk opbygget Query og jeg ved ikke hvad det returnere...
Avatar billede terry Ekspert
20. november 2002 - 09:49 #12
why dont you alter the "dynamisk opbygget Query" to return th ecolimn name too. There must be SOME logic in which fields it selects so this could be added.
Avatar billede ocp Nybegynder
20. november 2002 - 10:01 #13
Nej - men fidusen er jo netop at "select into"-tabellen opbygges efter hvordan dit query ser ud. Hvis du vil have fuldstændig frihed i selectet kan du gøre således:

select *
into #tmp
from view

OG endnu mere avanceret (hvis du ikke vil slæbe rundt på en gammel tabeldefinition):

if exists(select 1 from systables where name = 'tmp')
begin
drop table tmp
end

select *
into tmp
from view

Men så er det altså ikke en temporær tabel mere.
Avatar billede tommy Nybegynder
20. november 2002 - 10:04 #14
You are right about that and I have thought about it, but that is the hard way to do I, and right now im looking for the easy way... my point is the you should be able the get the information about the tables and if you have that you wouldn't have to supply it yourself.

But it would be a solution...
Avatar billede terry Ekspert
20. november 2002 - 10:10 #15
problem is that your using a VIEW and NOT tables.
Avatar billede tommy Nybegynder
20. november 2002 - 10:11 #16
Ja ok, men jeg kan stadig ikke se hvordan jeg får kolonne navnene med ned i min temp tabel. Sådanne som jeg forstår det du skriver så vil jeg "bare" ende med en temp tabel der er en kopi af det output jeg får fra mit view og det er jo ikke lige det jeg vil..

Jeg er ikke om det er mig der misser noget i det du skriver..
Avatar billede tommy Nybegynder
20. november 2002 - 10:12 #17
Damn noget sludder jeg skrev til sidst.

Det jeg prøvede at skrive var at jeg ikke var sikker på og jeg havde fattet alt det du skrev ;o)
Avatar billede ocp Nybegynder
20. november 2002 - 10:13 #18
NÅÅÅÅÅÅÅ... på DEN måde. To sekunder.
Avatar billede tommy Nybegynder
20. november 2002 - 10:15 #19
Terry: and if I use tables instead of views ?
Avatar billede terry Ekspert
20. november 2002 - 10:35 #20
well if it was me then I would use

SELECT "Email" as C1, Email, "UserName" AS C3, UserName, ........
Avatar billede ocp Nybegynder
20. november 2002 - 10:55 #21
Prøv lige denne her. Du skal blot indsætte dit viewnavn i stedet for "menu":

set nocount on

select top 1 *
into        #tmp
from         [menu]

create table tmpresult (value varchar(200))
insert into tmpresult values (null)

create table #result (cols varchar(200), vals varchar(200))

declare @field varchar(200)
declare @value varchar(200)

declare #crs cursor fast_forward
for select sc.name
        from        syscolumns sc,
                        sysobjects so
        where        sc.id = so.id
        and            so.name = 'menu'

open #crs

fetch next from #crs into    @field

while @@fetch_status = 0
begin
    execute('update tmpresult set value = ' + @field + ' from #tmp')
    select @value = value from tmpresult
    insert into #result values( @field, @value )
    fetch next from #crs into    @field
end

drop table tmpresult

close #crs
deallocate #crs
drop table #tmp

select * from #result
drop table #result
Avatar billede tommy Nybegynder
20. november 2002 - 10:58 #22
Jeg bliver lige nød til at lege lidt med den senere, men det begynder at ligne noget af det rigtige...

Vender tilbage senere :o)
Avatar billede tommy Nybegynder
20. november 2002 - 14:44 #23
Hej ocp.. det virker lige som det skulle :o) Mange tak for hjælpen!
Avatar billede ocp Nybegynder
20. november 2002 - 15:05 #24
Tak for points... Glad for at kunne hjælpe.
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