I think the problem is with the context of the executed dynamic sql string.

If you try something like this...

        DECLARE
                @max INT,
                @tableName VARCHAR(20),
                @sql VARCHAR(100)

        SET @tableName = 'tblQuestions'

        SET @sql = 'DECLARE @max INT SELECT @max = MAX(QuestionID) FROM ' +
@tableName

        EXEC(@sql)

... you'll see there's no error about @max not being declared because it is
declared within the context of the SELECT @max statement. I think!

This doesn't give you the result you're after and I can't think of a way
around this, there might be a way to get the result from one context to the
current on but I'm not sure how.

Let us know if you figure out a way.

Ade

-----Original Message-----
From: Eric Creese [mailto:[EMAIL PROTECTED]
Sent: 01 November 2004 22:38
To: CF-Talk
Subject: Stored Proc Help Needed Please


Ok I am buildin on an issue I solved a few weeks back about dynamically
generating the table name varible and using it in the FROM clause of an SQL
statement. I am now trying to use this method but also set a varible from
the select statement. I keep getting an error telling me I have to declare
the varible I am trying to set (@MaxLoopCounter) but it is in my declaration
statement. Can eanyone assist me with this or give me another approach?
Here is the stored proc. SQL2000.


CREATE PROCEDURE Validate_Member_Counts
@month1 varchar(10),
@month2 varchar(10)

AS
DECLARE
@pid1                   int,
@pid2                   int,
@expdate1               datetime,
@joindate1              datetime,
@expdate2               datetime,
@joindate2              datetime,
@status                 varchar(10),
@counttype              varchar(15),
@accttype               varchar(1),
@loopid                 int,
@MaxLoopCounter  int,
@SQL                    varchar(8000),
@TABLE_NAME1    sysname,
@TABLE_NAME2    sysname

--Create a holding table for results
IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id =
object_id(N'[dbo].[DAILY_MBR_COUNTS]') AND OBJECTPROPERTY(id, N'IsTable') =
1)
        CREATE TABLE [DAILY_MBR_COUNTS]
        (
        personid        int,
        accttype        varchar(1),
        status          varchar(10),
        joindate                datetime,
        expdate         datetime,
        counttype       varchar(15)
        )
ELSE
TRUNCATE TABLE DAILY_MBR_COUNTS;
SELECT @TABLE_NAME1 = @month1+'persondem';
SELECT @TABLE_NAME2 = @month2+'persondem'
SET @loopid = 1;
SELECT @SQL =' SELECT @MaxLoopCounter = Max(Loopid) FROM ' + @TABLE_NAME1
EXEC(@SQL)
WHILE @LoopId <= @MaxLoopCounter
BEGIN
-- Do your magic here
        SELECT  @SQL ='@pid1 = personid, @expdate1,@joindate1 FROM ' + @TABLE_NAME1
+'WHERE loopid = @loopid';
        EXEC(@SQL)
SET  @LoopId = @LoopID + 1
END
GO


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Special thanks to the CF Community Suite Gold Sponsor - CFHosting.net
http://www.cfhosting.net

Message: http://www.houseoffusion.com/lists.cfm/link=i:4:183404
Archives: http://www.houseoffusion.com/cf_lists/threads.cfm/4
Subscription: http://www.houseoffusion.com/lists.cfm/link=s:4
Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
Donations & Support: http://www.houseoffusion.com/tiny.cfm/54

Reply via email to