Avatar billede dmk Nybegynder
23. september 2005 - 11:18 Der er 3 kommentarer og
1 løsning

Dynamisk SQL og cursors

Hej

Er det muligt at erklære en cursor til noget dynamisk SQL?

Jeg forestiller mig noget i stil med:

declare my_cursor cursor;
declare @sql varchar(200)
set @sql='select a,b from my_table';
open my_cursor for @sql;

Jeg har slemt på fornemmelsen at det ikke kan lade sig gøre, men det kan være der er nogen der har nogle tricks jeg ikke kender :)
Avatar billede teepee Nybegynder
23. september 2005 - 11:40 #1
Prøv at studere denne procedure nærmere på nettet, "exec sp_executesql"
Se evt. lille eksempel:

DECLARE @sqlStr nvarchar(1000)
DECLARE @sqlParms nvarchar(1000)
DECLARE @tableCount int
SET @sqlStr = 'SELECT @tableCount = COUNT(*) FROM sysobjects WHERE type = ''U'''
SET @sqlParms = '@tableCount int OUTPUT'

exec sp_executesql @sqlStr, @sqlParms, @tableCount = @tableCount OUTPUT
SELECT @tableCount
Avatar billede dmk Nybegynder
27. september 2005 - 19:59 #2
Hejsa

Undskyld jeg først svarer nu!

Jeg kan godt følge dig, og jeg har lavet en lille test for at prøve det. Og det virker!

Jeg havde dog lige lidt problemer med det, og det har vist sig, at man skal sørge for at ÅBNE sin cursor inde i det dynamiske SQL. Ikke at jeg har fået nogen forklaring eller forstår hvorfor, men ellers kunne jeg ikke få det til at virke.

RUNNING EXAMPLE:

declare  @sql nvarchar(2000)
declare @sqlpar nvarchar(2000)

set @sql='declare local_cursor cursor local for select myvalue from mytable; open local_cursor; set @curpar=local_cursor;';
set @sqlpar='@curpar cursor output';

declare @mycur cursor;
exec sp_executesql @sql, @sqlpar, @curpar=@mycur output;

declare @val varchar(2000)
while 1=1 begin
  fetch @mycur into @val;
  if @@fetch_status!=0 break;
  print @val;
end



Tak for hjælpen!
Avatar billede dmk Nybegynder
19. oktober 2005 - 17:21 #3
Jeg kan
Avatar billede dmk Nybegynder
19. oktober 2005 - 17:22 #4
Nå, jeg havde prøvet at acceptere det svar et par gange, men den ignorerede mig totalt.
Men nu lykkedes det vist :)
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