From: Thomas Malia on
Does anyone know if it is possible, and if so how, to use a dynamically built SQL statement as the source for a cursor in T-SQL?

For example, I'd like to do something functionally like the following:

DECLARE @TABLENAME varchar(255)

DECLARE @ID varchar(255)


SET @TABLENAME = 'Customers'


DECLARE CSR_TEST CURSOR FOR

EXEC('Select Custid from ' + @TABLENAME)


OPEN CSR_TEST

FETCH NEXT FROM CSR_TEST INTO @ID

WHILE @@FETCH_STATUS = 0

BEGIN

PRINT @ID

FETCH NEXT FROM CSR_TEST INTO @ID

END

CLOSE CSR_TEST

DEALLOCATE CSR_TEST



Is this possible?


Tom Malia

T&T Data Solutions L.L.C.

Dynamics SL MVP since Sept. 2007


From: Uri Dimant on
Hi

Dynamic cursor should be used

USE Pubs
GO
DECLARE @AuthorId VARCHAR(20)
DECLARE @TableName VARCHAR(255)
SET @TableName = 'authors'

EXEC('DECLARE TAB_CURSOR CURSOR GLOBAL FOR
SELECT au_id FROM ' + @TableName)
OPEN TAB_CURSOR
FETCH NEXT FROM TAB_CURSOR INTO @AuthorId
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @AuthorId
FETCH NEXT FROM TAB_CURSOR
END
CLOSE TAB_CURSOR
DEALLOCATE TAB_CURSOR

"Thomas Malia" <tommalia(a)worldnet.att.net> wrote in message news:eBlTrKd4IHA.3480(a)TK2MSFTNGP03.phx.gbl...
Does anyone know if it is possible, and if so how, to use a dynamically built SQL statement as the source for a cursor in T-SQL?

For example, I'd like to do something functionally like the following:

DECLARE @TABLENAME varchar(255)

DECLARE @ID varchar(255)


SET @TABLENAME = 'Customers'


DECLARE CSR_TEST CURSOR FOR

EXEC('Select Custid from ' + @TABLENAME)


OPEN CSR_TEST

FETCH NEXT FROM CSR_TEST INTO @ID

WHILE @@FETCH_STATUS = 0

BEGIN

PRINT @ID

FETCH NEXT FROM CSR_TEST INTO @ID

END

CLOSE CSR_TEST

DEALLOCATE CSR_TEST



Is this possible?


Tom Malia

T&T Data Solutions L.L.C.

Dynamics SL MVP since Sept. 2007


From: Alejandro Mesa on
Thomas Malia,

You can also use:

USE Pubs
GO

DECLARE @AuthorId VARCHAR(20)
DECLARE @TableName VARCHAR(255)

SET @TableName = 'authors'

declare @sql nvarchar(4000)
declare @c cursor

set @sql = N'
set @c = CURSOR LOCAL STATIC READ_ONLY
FOR
SELECT au_id FROM ' + quotename(@TableName) + N';open @c'

exec sp_executesql @sql, N'@c cursor output', @c output

IF CURSOR_STATUS('variable', '@c') = 1
BEGIN
WHILE 1 = 1
BEGIN
FETCH NEXT FROM @c INTO @AuthorId

IF @@ERROR <> 0 OR @@FETCH_STATUS <> 0 BREAK

PRINT @AuthorId
END

CLOSE @c
END

DEALLOCATE @c
GO


Why don't you tell us your needs for a cusor?

AMB


"Thomas Malia" wrote:

> Does anyone know if it is possible, and if so how, to use a dynamically built SQL statement as the source for a cursor in T-SQL?
>
> For example, I'd like to do something functionally like the following:
>
> DECLARE @TABLENAME varchar(255)
>
> DECLARE @ID varchar(255)
>
>
> SET @TABLENAME = 'Customers'
>
>
> DECLARE CSR_TEST CURSOR FOR
>
> EXEC('Select Custid from ' + @TABLENAME)
>
>
> OPEN CSR_TEST
>
> FETCH NEXT FROM CSR_TEST INTO @ID
>
> WHILE @@FETCH_STATUS = 0
>
> BEGIN
>
> PRINT @ID
>
> FETCH NEXT FROM CSR_TEST INTO @ID
>
> END
>
> CLOSE CSR_TEST
>
> DEALLOCATE CSR_TEST
>
>
>
> Is this possible?
>
>
> Tom Malia
>
> T&T Data Solutions L.L.C.
>
> Dynamics SL MVP since Sept. 2007
>
>
>
From: Erland Sommarskog on
Uri Dimant (urid(a)iscar.co.il) writes:
> Dynamic cursor should be used

Nah, use static unless you know you really want something else:

> EXEC('DECLARE TAB_CURSOR CURSOR GLOBAL FOR

EXEC('DECLARE TAB_CURSOR CURSOR STATIC GLOBAL FOR



--
Erland Sommarskog, SQL Server MVP, esquel(a)sommarskog.se

Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodinfo/previousversions/books.mspx
From: --CELKO-- on
Both dynamic SQL and Cursors are considered bad SQL programming. Why
don't you tell us what5 you want to do instead of how you decided to
do it?