ERROR:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
SELECT@Scheduled=(SELECT T.SCHEDULEDTIME FROM #TEMP_SB_ZEROSPLIT T WHERE T.SCHEDULEDTIME=(SELECT MAX(ISNULL(T.SCHEDULEDTIME,0))FROM #TEMP_SB_ZEROSPLIT T WHERE T.SPLIT_BOOK_ID=@BOOK_ID));
SELECT @Signeddate=(SELECT T.SIGNING_DATE FROM #TEMP_SB_ZEROSPLIT T WHERE T.SIGNING_DATE = (SELECT MAX(T.SIGNING_DATE ) FROM #TEMP_SB_ZEROSPLIT T WHERE T.SPLIT_BOOK_ID=@BOOK_ID));
Loading
Syed Nayab AliPosted Nov 3, 2011, 2:31 PM
I used cursor to solve u r problem.
Cursor use to manipulate data on row by row basis.
I think following will help you
declare @Scheduled datetime
declare @Signeddate datetime
DECLARE Schedule_Signing_Cursor CURSOR FOR
-------------------------------------- This code will fetch values one by one ---------------------------
SELECT T.SCHEDULEDTIME FROM #TEMP_SB_ZEROSPLIT T WHERE T.SCHEDULEDTIME=(SELECT MAX(ISNULL(T.SCHEDULEDTIME,0))FROM #TEMP_SB_ZEROSPLIT T WHERE T.SPLIT_BOOK_ID=@BOOK_ID)
union
SELECT T.SIGNING_DATE FROM #TEMP_SB_ZEROSPLIT T WHERE T.SIGNING_DATE = (SELECT MAX(T.SIGNING_DATE ) FROM #TEMP_SB_ZEROSPLIT T WHERE T.SPLIT_BOOK_ID=@BOOK_ID)
----------------------------------------------------------------------------------------------------------
OPEN VOID_ACCT_cursor
FETCH NEXT FROM Schedule_Signing_Cursor
INTO @Scheduled,@Signeddate
WHILE @@FETCH_STATUS = 0
BEGIN
----------------- Picked value from above code will put one by one in following code for manipulation ------------------
If @Scheduled IS NOT NULL OR @Scheduled<=@Expiration
BEGIN
SET @TextMarketing='ACTIVE';
SET @Expiration=(DATEADD(DAY,-1,(DATEADD(YEAR,1,@Signeddate))))
END
else
BEGIN
SET @TextMarketing='INACTIVE';
SET @Expiration=NULL;
END
UPDATE #TEMP_SB_ZEROSPLIT SET
karthik parchaPosted Nov 7, 2011, 1:08 AM
Did you get the result plz help me
karthik parchaPosted Nov 5, 2011, 9:09 AM
thanks for ur patience your helping me a lot thank u so much.
iam using
@TextMarketing,@expiration variables to update
TEXT_MARKETING_STATUS,EXPIRATION_DATE columns iam adding these two
columns to temp table where iam binding all columns data to my last temp table
its a big sp so iam addind columns to temp table i have to show in reports
tablename:#TEMP_SB
And iam getting scheduledtime column data to @scheduled variable
And iam getting signedtime data column data to @signed variable
so the data coming from the @signed variable.
placing this @signed variable into @expiration variable like this
SELECT @Expiration=(DATEADD(DAY,-1,(DATEADD(YEAR,1,@Signeddate))))
by adding 1year minus 1 day to @signed variable
so if @schedule < @expiration he is active
else inactive...then iam updating columns TEXT_MARKETING_STATUS,EXPIRATION_DATE
i hope you understand plz help me plz plz
Thanks,
karthik
Syed Nayab AliPosted Nov 4, 2011, 2:15 PM
I have one question.
Is @scheduled, @signeddate and @expiration are going to use update any column of any table ????
if yes, then please give me column name and corresponding table name so we don't need above variables in our code.
Thanks
karthik parchaPosted Nov 4, 2011, 12:43 PM
DECLARE @TextMarketing VARCHAR(50);
DECLARE @Scheduled DATETIME;
DECLARE @Expiration DATETIME;
DECLARE @Signeddate DATETIME ;
--This Code will fetch values one by one----------
DECLARE Schedule_Signing_Cursor CURSOR FOR
(SELECT T.SCHEDULEDTIME FROM #TEMP_SB T WHERE T.SPLIT_BOOK_ID=@BOOK_ID)
UNION ALL
(SELECT T.SIGNING_DATE FROM #TEMP_SB T WHERE T.SPLIT_BOOK_ID=@BOOK_ID);
SELECT (DATEADD(DAY,-1,(DATEADD(YEAR,1,@Signeddate))))
OPEN Schedule_Signing_Cursor
FETCH NEXT FROM Schedule_Signing_Cursor
INTO @Scheduled,@Signeddate
WHILE @@FETCH_STATUS = 0
BEGIN
------Picked value from above code will put one by one in following code for manipulation -------
if @Scheduled IS NOT NULL OR @Scheduled<=@Expiration
BEGIN
SET @TextMarketing='ACTIVE';
SET @Expiration=(DATEADD(DAY,-1,(DATEADD(YEAR,1,@Signeddate))))
END
else
BEGIN
SET @TextMarketing='INACTIVE';
SET @Expiration=NULL;
END
UPDATE #TEMP_SB SET TEXT_MARKETING_STATUS=@TextMarketing,EXPIRATION_DATE=@Expiration
FETCH NEXT FROM Schedule_Signing_Cursor
INTO @Scheduled,@Signeddate
End
CLOSE Schedule_Signing_Cursor
DEALLOCATE Schedule_Signing_Cursor
Textametingstatus Expirationdate columns are getting null values
plz hel me
Syed Nayab AliPosted Nov 4, 2011, 12:16 PM
You must declare all variable before declare cursor name which are going to use in cursor body
I think you forgot to declare @expiration at the begning.
You are using @Expiration after INTO to get value in it from above section without declaring it.
just declare 3 variable at begning of ur code
declare @scheduled datetime
declare @signeddate datetime
declare @expiration datetime
and use
SELECT DATEADD(DAY,-1,(DATEADD(YEAR,1,@Signeddate)))
in place of
SELECT @Expiration=(DATEADD(DAY,-1,(DATEADD(YEAR,1,@Signeddate))))
otherwiase it will give you an error.
Thanks
Please click on "Accepted Answer" if it helps you
karthik parchaPosted Nov 4, 2011, 2:01 AM
Awesome work
thanks a lot for your help but iam getting following error
Cursorfetch: The number of variables declared in the INTO list must match that of selected columns.
when status is inactive it not going to else loop plz help me
plz try figure out this issue
Actually I had written like this
-------------------------------
i have to get expiration date also
DECLARE Schedule_Signing_Cursor CURSOR FOR
(SELECT T.SCHEDULEDTIME FROM #TEMP_SB T WHERE T.SCHEDULEDTIME=(SELECT MAX(ISNULL(T.SCHEDULEDTIME,0)) FROM #TEMP_SB T WHERE T.SPLIT_BOOK_ID=@BOOK_ID))
UNION
(SELECT T.SIGNING_DATE FROM #TEMP_SB T WHERE T.SIGNING_DATE = (SELECT MAX(ISNULL(T.SIGNING_DATE,0)) FROM #TEMP_SB T WHERE T.SPLIT_BOOK_ID=@BOOK_ID));
SELECT @Expiration=(DATEADD(DAY,-1,(DATEADD(YEAR,1,@Signeddate))))
------------------------------------------------------
OPEN Schedule_Signing_Cursor
FETCH NEXT FROM Schedule_Signing_Cursor
INTO @Scheduled,@Signeddate,@Expiration
WHILE @@FETCH_STATUS = 0
BEGIN
------Picked value from above code will put one by one in following code for manipulation -------
if @Scheduled IS NOT NULL OR @Scheduled<=@Expiration
BEGIN
SET @TextMarketing='ACTIVE';
SET @Expiration=(DATEADD(DAY,-1,(DATEADD(YEAR,1,@Signeddate))))
END
else
BEGIN
SET @TextMarketing='INACTIVE';
SET @Expiration=NULL;
END
UPDATE #TEMP_SB SET TEXT_MARKETING_STATUS=@TextMarketing,EXPIRATION_DATE=@Expiration
-------------------------------------------------------------------------------
FETCH NEXT FROM Schedule_Signing_Cursor
INTO @Scheduled,@Signeddate,@Expiration
End
CLOSE Schedule_Signing_Cursor
DEALLOCATE Schedule_Signing_Cursor
karthik parchaPosted Nov 3, 2011, 11:44 AM
My task is
Adding to fields to table
1). Text Marketing Status options active and inactive
2). Text Marketing Expiration Date:
The most recently signed text marketing contract is ON or AFTER 1/1/2011 AND the date the Schedule time <= (Contract Signing Date + 1 year - 1 day.
So in scheduled variable iam getting schedule time
And in Signed variable iam getting Signing_date
In Expiration variable iam geting adding 1year to Signing_date and minus 1day.
FOR (Example if the contract signed was on 2/3/2011 then it would be active through 2/2/2012.)My task is this
I hope you understand in my database thosuands of ecords ate there plz try to help me
If @Scheduled IS NOT NULL OR @Scheduled<=@Expiration
BEGIN
SET @TextMarketing='ACTIVE';
SET @Expiration=(DATEADD(DAY,-1,(DATEADD(YEAR,1,@Signeddate))))
END
else
BEGIN
SET @TextMarketing='INACTIVE';
SET @Expiration=NULL;
END
UPDATE #TEMP_SB_ZEROSPLIT SET TEXT_MARKETING_STATUS=@TextMarketing,EXPIRATION_DATE=@Expiration
Thanks
karthik
Syed Nayab AliPosted Nov 3, 2011, 10:22 AM
I can give u an alternate way but for this u need to tell me what you want to do with u r variable (@Scheduled & @signeddate) ??????
karthik parchaPosted Nov 3, 2011, 5:55 AM
ya its returning multiple values thats why iam getting error can u modify my query
Dipal ChoksiPosted Nov 3, 2011, 4:12 AM