Dynamisk SQL

Tags:    databaser

Hej

Er der nogle der lige kan hjælpe mig med et lille problem.

Jeg har kode en SP under en database på SQL Serveren, denne SP skal bruges til at skrive i flere databaser, det vil sige at jeg har behov for at ændre hvilken database SP'en skal operer på, runtime. Jeg har prøve at overføre databasens navn via en parameter, men dette giver blot en error under eksikvering. Jeg har så kigget på Dynamic SQL, ide'en om at skulle sammesætte ens SP i en tekst streng med de ønskede parameter syntes jeg virker lidt for tungt. Eller har jeg misforstået dynamisk SQL??

På forhånd tak
Hilsen
Thomas Vanting



4 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Der er flere former for SP'er i SQL Serveren, der er nogle globale eks sp_updatestats og så videre der virker på tværs af alle databaser, disse SP'er er gemt i MASTER databasen, så er der midlertidige SP'er der er gemt i tempdb, de er lokale for databasen og bliver slettet når forbindelsen til database serveren mistes. Så er der almindelige lokale SP'er, det er typisk dem man selv strikker sammen, disse database updaterer eksempelvis en bruger eller lignende i en tabel.

.......har lige testet det......

Det er ikke muligt at benytte en 'use' klausul i en procedure eller trigger, den fejl får jeg når jeg forsøger at lave det i en stored procedure. Hvad med at lave dine stored procedures kun i den ene database (hvis det er muligt) og så få dem til at lave almindelige selects og inserts i de andre databaser...

Det smarte ved SP er at de bliver kompileret een gang og aldrig mere! det vil sige at det ikke giver mening at skulle strikke dem sammen runtime

(¯`·._.·[Brian Hvarregaard]·._.·´¯)



[Redigeret d. 16/08-04 12:33:07 af Brian Hvarregaard]



Så vidt jeg ved eksisterer en SP kun inden for den database hvor den er blevet oprettet, med mindre det er globale SP vi taler om her (dem der findes i MASTER databasen), ellers tror jeg ikke du kommer uden om at skulle lave dine SP på hver database...

(¯`·._.·[Brian Hvarregaard]·._.·´¯)



Hej Brian

Tak for dit svar.
Uden jeg er helt sikker, mener jeg at have eksikveret fra SQL Query Analyzer en SP fra en anden end den aktive database. Men jeg er ikke sikker. Men jeg syntes da at SQL er noget "stiv" hvis man kan lave nogle genrelle SP'er som styres parametrisk, hvilke database transaktioner fortagers på .

Jeg har de svære ikke muligheden for at sammesætte en stor database, da jeg har en tidsplan som er noget stram på dette projekt ;-)

Hilsen Thomas Vanting



Hej Brian

Jeg har også prøvet at bruge USE i SP, og fundet ud af at det ikke virker.
Det bu beskriver med at lave SP i en database også bruge dem i andre databaser, er lige netop det jeg gerne vil. Men kan ikke så det til at virke. I går prøvede jeg et forsøg:

DECLARE @TabelName varchar(100)

SET @TabelName = 'TestTabel'

SELECT * FROM @TabelName

For hvis man bare kunne gøre dette, ville det løse en del af mine problemer, da jeg så kunne komme vidre dog som alm. SQL query's. Men ak, nej det kan man heller ikke.

Jeg takker for dine forslag og ideer.

Hilsen Thomas




t